本来是不打算贴这道水题的,自己却WA了三次。。
要考虑1的情况,1的质因子为1
思路:先打表 ,然后根据最大质因子更新结果
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 20000
int p[MAX];
int main()
{
memset(p,,sizeof(p));
p[]=;
for(int i=;i<;i++)
{
if(p[i]==)
{
int k=i*;
while(k<)
{
p[k]=;
k+=i;
}
}
} int n;
int ans;
int m;
int maxn;
while(scanf("%d",&n)!=EOF)
{
maxn=;
while(n--)
{
scanf("%d",&m);
if(p[m]==)
{
if(m>maxn) {ans=m;maxn=m;}
continue;
}
int temp=m/;
int j;
for(j=temp;j>maxn;j--)
{
if(p[j]==&&m%j==)
{
maxn=j;ans=m;
break;
}
} }
cout<<ans<<endl;
}
return ;
}