hdu oj 2136 Largest prime factor 和 nyoj 520 最大素因子 【筛选法】

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]);
	}
}                


你可能感兴趣的:(hdu oj 2136 Largest prime factor 和 nyoj 520 最大素因子 【筛选法】)