题目:http://acm.hdu.edu.cn/showproblem.php?pid=2710
思路:用类似“埃氏筛法”求素数的方法 只是不在把合数标记为1 而是标记为他是因子数。 最后比较大小即可。
1 #include<cstdio> 2 #include<cstring> 3 const int MAXN=20001; 4 int s[MAXN]; 5 int main() 6 { 7 int n,m; 8 memset (s,0,sizeof(s)); 9 s[1]=1; 10 //经过该循环 ,s[j]代表 j是序列号 s【j】代表j的最大因子数,该方法有点像“埃氏筛法”求素数 不懂的可以参考我的上一篇文章 11 for(int i=2;i<MAXN;i++) 12 { 13 if(s[i]==0) 14 for(int j=i;j<MAXN;j+=i) 15 s[j]=i; 16 } 17 //找出最大的最靠前的数 18 while(~scanf("%d",&n)) 19 { 20 int ans; 21 int maxx=-1; 22 for(int i=0;i<n;i++) 23 { 24 scanf("%d",&m); 25 if(s[m]>maxx) 26 {maxx=s[m]; 27 ans=m; 28 } 29 } 30 printf("%d ",ans); 31 } 32 return 0; 33 }