/*
分析:
极限ac,968MS,暴汗- -III。
num数组是筛选用的。
hash数组(元素与num数组一一对应)记录该素数是第几个。
摘:一个好点儿的思路:
筛法求素数是定义一个数组,一开始都置为0,然后把素数的倍数都置为1。
而这里是把某个素数连同他的倍数一起置为它的素数序号,从小到大循环,
这样数组里存放的序号就是最大素数因子的序号了。
2012-04-19
*/
分析:
极限ac,968MS,暴汗- -III。
num数组是筛选用的。
hash数组(元素与num数组一一对应)记录该素数是第几个。
摘:一个好点儿的思路:
筛法求素数是定义一个数组,一开始都置为0,然后把素数的倍数都置为1。
而这里是把某个素数连同他的倍数一起置为它的素数序号,从小到大循环,
这样数组里存放的序号就是最大素数因子的序号了。
2012-04-19
*/
#include"stdio.h"
#include"math.h"
#include"string.h"
int num[1000000];
int hash[1000000];
int main()
{
int i;
int n;
int t;
int temp;
int k;
int max_prime;
memset(num,0,sizeof(num));
num[0]=num[1]=1;
k=0;
for(i=2;i<1000000;i++)
{
if(num[i]==0)
{
for(temp=2*i;temp<1000000;temp+=i)
num[temp]=1;
k++;
hash[i]=k;
}
}
while(scanf("%d",&n)!=-1)
{
t=(int)sqrt(n);
max_prime=1;
for(i=1;i<=t;i++)
{
if(n%i==0)
{
if(num[i]==0&&i>max_prime)
max_prime=i;
if(num[n/i]==0&&n/i>max_prime)
max_prime=n/i;
}
}
if(max_prime==1)
printf("0\n");
else
printf("%d\n",hash[max_prime]);
}
return 0;
}