题目连接: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;
}