1~n多少个数不能被任意ai整除,n<=1013,i<=100,保证(ai,aj)互质,i≠j
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
const int maxn = 101000;
typedef long long int ll;
ll f[maxn][101];int a[101];
ll dp(ll i,int j){
if(i<maxn&&f[i][j]!=-1)return f[i][j];
if(j==0)return i;
ll t=dp(i,j-1)-dp(i/a[j],j-1);
if(i<maxn)f[i][j]=t;
return t;
}
ll n;int k;
int main(){
memset(f,-1,sizeof(f));
cin>>n>>k;
rep(i,1,k)cin>>a[i];
sort(a+1,a+k+1);
cout<<dp(n,k)<<endl;
return 0;
}
本文探讨了在1到n范围内有多少个数不被给定的一组互质整数整除的问题。通过动态规划方法实现了高效的求解算法,并提供了一个完整的C++实现示例。
275

被折叠的 条评论
为什么被折叠?



