Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8976 Accepted Submission(s): 3191
#include<bits/stdc++.h> using namespace std; int n; bool visit[1000005]; int prime[1000005]; map<int,int>mp; int len; int que[10]; void init_prim() { memset(visit, true, sizeof(visit)); int num = 0; for (int i = 2; i <= 1000000; ++i) { for(int j=i+i;j<=1000000;j=j+i) visit[j]=false; } for(int i=2;i<=1000000;i++) if(visit[i]) { prime[++num]=i; mp[i]=num; } } void prime_(int nn) { len=0; for(int i=2;i*i<=nn;i++) { if(nn%i==0) { que[len++]=i; while(nn%i==0) { nn=nn/i; } } } if(nn>1) que[len++]=nn; } int main() { init_prim(); while(scanf("%d",&n)!=EOF) { len=0; memset(que,0,sizeof(que)); if(n==1) printf("0\n"); else { prime_(n); sort(que,que+len); //cout<<len<<endl; printf("%d\n",mp[que[len-1]]); } } return 0; }
原文:http://www.cnblogs.com/hsd-/p/4999409.html