HDU 2710 Max Factor

阅读更多

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2710

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

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

代码:

#include #include #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 Max Factor)