素数筛选
#include<iostream>
using namespace std;
int prime[20005];
int max_prime[20005];
//打表,1到20000之间的所有素数
void is_prime()
{
prime[0]=0;
prime[1]=0;
for(int i=2;i*i<=20000;i++) //根号范围内做筛选就可以了
{
if(prime[i])
{
int j=i*2; //从2倍开始
while(j<20000)
{
prime[j]=0;
j+=i; //i的2倍,3倍,4倍,5倍......
}
}
}
}
//打表,最大素数因子
void is_max_prime()
{
for(int i=2;i<=20000;i++)
{
for(int j=i;j>=2;j--)
{
if(prime[j]&&i%j==0)
{
max_prime[i]=j;
break;
}
}
}
}
int main()
{
int n,a[5005],b[5005];
for(int i=0;i<=20000;i++)
{
prime[i]=-1;
}
for(int i=0;i<=20000;i++)
{
max_prime[i]=0;
}
is_prime();
is_max_prime();
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>a[i]; //a[i]是奶牛的序号
b[i]=max_prime[a[i]]; //b[i]存储奶牛的最大的素数因子
}
int num=a[0];
int ans=b[0];
for(int i=1;i<n;i++)
{
if(ans<b[i])
{
ans=b[i];
num=a[i]; //最后答案
}
}
cout<<num<<endl;
}
return 0;
}