f(x)表示x分解的质因数的个数,求1-n中最大的f(X) (1<=x<=n)。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<vector> #define maxn 2000000 using namespace std; int cnt[maxn+5],ans[maxn+5]; vector<int> prime; bool vis[maxn+5]; void init() { memset(vis,0,sizeof(vis)); for(int i=2;i<=maxn;i++) { if(!vis[i]) { prime.push_back(i); cnt[i]=1; //cnt[i]存i的质因数的个数 } for(int j=0;j<prime.size() && i*prime[j]<=maxn;j++) { vis[i*prime[j]]=true; cnt[i*prime[j]]=cnt[i]+1; //边筛素数边计算cnt数组 if(i%prime[j]==0) break; } } } int main() { int n; init(); ans[1]=cnt[1]; for(int i=2;i<=maxn;i++) { ans[i]=max(ans[i-1],cnt[i]); //ans[i]记录1-i中最大的f(x) } while(scanf("%d",&n)!=EOF) { printf("%d\n",ans[n]); } return 0; }
wustoj 1285 Factors,布布扣,bubuko.com
原文:http://blog.csdn.net/u012841845/article/details/22575025