本来是不打算贴这道水题的,自己却WA了三次。。
要考虑1的情况,1的质因子为1
思路:先打表 ,然后根据最大质因子更新结果
代码:
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 #define MAX 20000 7 int p[MAX]; 8 int main() 9 { 10 memset(p,0,sizeof(p)); 11 p[1]=0; 12 for(int i=2;i<20000;i++) 13 { 14 if(p[i]==0) 15 { 16 int k=i*2; 17 while(k<20000) 18 { 19 p[k]=1; 20 k+=i; 21 } 22 } 23 } 24 25 int n; 26 int ans; 27 int m; 28 int maxn; 29 while(scanf("%d",&n)!=EOF) 30 { 31 maxn=0; 32 while(n--) 33 { 34 scanf("%d",&m); 35 if(p[m]==0) 36 { 37 if(m>maxn) {ans=m;maxn=m;} 38 continue; 39 } 40 int temp=m/2; 41 int j; 42 for(j=temp;j>maxn;j--) 43 { 44 if(p[j]==0&&m%j==0) 45 { 46 maxn=j;ans=m; 47 break; 48 } 49 } 50 51 } 52 cout<<ans<<endl; 53 } 54 return 0; 55 }