先打表得出素数表,在分表计算出每个数的素因子比较他们的
大小;记录素因子大的数即可;
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 20005;
int a[maxn];
void prime()
{
memset(a, 0, sizeof(a));
for(int i = 2; i <= maxn/2; i++)
{
for(int j = i; j*i <= maxn; j++)
if(!a[i*j]) a[i*j] = 1;
}
}
int main()
{
prime();
int t;
while(scanf("%d", &t)!=EOF)
{
int n, m = 0, xh;
while(t--)
{
scanf("%d", &n);
if(!a[n] && (n > m))
{
m = n;
xh = n;
}
else
{
for(int i = 1; i <= n; i++)
{
if(!a[i]&&i*(n/i)==n&&!a[n/i])
{
if((i > n/i)&&i > m)
{
m = i;
xh = n;
}
else if(i < n/i&&(n/i)>m)
{
m = n/i;
xh = n;
}
}
}
}
}
printf("%d\n", xh);
}
}
hdu2710
最新推荐文章于 2018-07-20 08:41:45 发布