您的位置:首页 > 其它

HDU 2710 Max Factor(素数筛选)

2012-01-13 09:12 239 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2710

题目大意:给出几个数,找出最大的素数因子,如果素数因子相同,则输出最小的那个数。

思路:以前求素数都是用两层循环,现在这个数字比较大,还是用老方法会超时,所以很容易想到素数筛选(以前就做过一道素数筛选的题目,嘿嘿),题目唯一不同的就是在题目里面1是作为素数的(还是从网上找到的)。

代码:

#include<stdio.h>
#include<string.h>
#define maxn 20001
int main()
{
int s,n,i,j,a[maxn],max,p;
memset(a,0,sizeof(a));//**数组全部清零**//
a[1]=1;//**去掉就错了,题目居然把1认作素数**//
for(i=2;i<=maxn;i++)
{
if(a[i]==0)
{
for(j=i;j<=maxn;j=j+i)//**筛选法求素数**//
{
a[j]=i;//**此时j保存的就是最大的素数**//
}
}
}
while(~scanf("%d",&s))
{
max=0;
for(i=1;i<=s;i++)
{
scanf("%d",&n);
if(a
>max)
{
max=a
;
p=n;
}
}
printf("%d\n",p);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: