hdu 2710 水题

时间:2024-06-04 11:03:38

题意:判断一些数里有最大因子的数

水题,省赛即将临近,高效的代码风格需要养成,为了简化代码,以后可能会更多的使用宏定义,但是通常也只是快速拿下第一道水题,涨自信。大部分的代码还是普通的形式,实际上能简化的部分也不太多

 #include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
#define for0n for(i=0;i<n;i++)
#define for1n for(i=1;i<=n;i++)
const int MAXN=;
int prime[MAXN+];
void getPrime()
{
memset(prime,,sizeof(prime));
for(int i=;i<=MAXN;i++)
{
if(!prime[i])prime[++prime[]]=i;
for(int j=;j<=prime[]&&prime[j]<=MAXN/i;j++)
{
prime[prime[j]*i]=;
if(i%prime[j]==) break;
}
}
}
long long factor[][];
int fatCnt;
int getFactors(long long x)
{
fatCnt=;
long long tmp=x;
for(int i=;prime[i]<=tmp/prime[i];i++)
{
factor[fatCnt][]=;
if(tmp%prime[i]==)
{
factor[fatCnt][]=prime[i];
while(tmp%prime[i]==)
{
factor[fatCnt][]++;
tmp/=prime[i];
}
fatCnt++;
}
}
if(tmp!=)
{
factor[fatCnt][]=tmp;
factor[fatCnt++][]=;
}
return fatCnt;
} int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
int t,n,k;
int i,j;
getPrime();
int flag;
while(cin>>n)
{
int maxx=-;
for0n
{
cin>>k;
getFactors(k);
if(maxx<factor[fatCnt-][])
{
flag=k;
maxx=factor[fatCnt-][];
}
}
cout<<flag<<endl;
}
}