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