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

36 篇文章 0 订阅
12 篇文章 0 订阅

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值