pku 3048 Max Factor(素数筛法)
#include <stdio.h>
#define MAXN 20011
bool flag[MAXN];
int prime[MAXN/2];
void get_prime(int &k)
{
int i,j;
for(i=2;i<MAXN;i++)
{
if(!flag[i]) prime[k++]=i;
for(j=1;j<k && i*prime[j]<MAXN;j++)
{
flag[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
}
inline int get_maxf(int n,const int k)
{
int i,maxf=-1;
for(i=0;i<k;i++)
if(n%prime[i]==0 && maxf<prime[i]) maxf=prime[i];
return maxf;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("tdata.txt","r",stdin);
#endif
int n,a,k=0,max,ans,t;
prime[k++]=1;
get_prime(k);
while(scanf("%d",&n)!=EOF)
{
max=-1;
while(n--)
{
scanf("%d",&a);
t=get_maxf(a,k);
if(t>max)
{
max=t;
ans=a;
}
}
printf("%d\n",ans);
}
return 0;
}
浙公网安备 33010602011771号