题目连接: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[n]>max)
{
max=a[n];
p=n;
}
}
printf("%d\n",p);
}
return 0;
}
本文介绍了一种通过素数筛选算法解决HDU 2710问题的方法,该问题要求找出一组数字中最大素数因子,并在素数因子相同时返回最小的数字。文章提供了完整的C语言实现代码。
&spm=1001.2101.3001.5002&articleId=7197769&d=1&t=3&u=38c4e4a3b9fd4e96a1c45d601294afe5)
644

被折叠的 条评论
为什么被折叠?



