hud oj 2136 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2136
nyoj 520 链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=520
这两个题是一样的,nyoj就是翻译hduoj的,在hduoj看不懂题的可以到nyoj 去看看。。这个题是貌似还是 ice 翻译过来的,说一下思路吧。
看看题时间限制为1000ms,n范围1000000,如果你先打个素数表,在一个一个判断输入数据的最大质因子序数,这样肯定让你超时。。
这个题应该用筛法。筛完之后就把能把所有 在1000000内的数最大质因子的序数存在一个数组中,具体筛法是:如果a为素数(假设序数为1),则把它的序数记在一个数组b [ a ] = 1里,然后 b [ 2a ],b [ 3a ],b [ 4a ] .......都即为1;就这样在筛选的过程中不断更新,筛完之后就有ok了。。
代码:
#include<stdio.h>
#define max 1000005
int prime[max]={0};
int main()
{
int a,b,n,c=1;
for(a=2;a<max;a++)
{
if(prime[a]==0)
{
for(b=a;b<max;b+=a)
prime[b]=c;
c++;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",prime[n]);
}
}