您的位置:首页 > 其它

hdu 5207

2015-04-18 22:03 78 查看
题目大意:
给定一组数,取两个数,使得gcd最大.
分析:
先nlogn预处理出105所有数的因子,然后用cnt数组计数给定数的因子个数,再找到最大的i,满足cnt[i]>=2,复杂度为nlogn。
学习一下这种思路


#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#defineINF
#definemaxn100100
usingnamespacestd;
typedeflonglongLL;
intvist[maxn],cnt[maxn];
intmm;
voidsolve()
{
for(inti=2;i<=mm;i++)
{
for(intj=i;j<=mm;j+=i)
{
if(vist[j])
cnt[i]+=vist[j];
}
}//nlogn的复杂度
}

intmain()
{
intt,a[maxn],n;
scanf("%d",&t);
for(intii=1;ii<=t;ii++)
{
scanf("%d",&n);
memset(vist,0,sizeof(vist));
for(inti=1;i<=n;i++)
{
scanf("%d",&a[i]);
vist[a[i]]++;
mm=max(mm,a[i]);
}
memset(cnt,0,sizeof(cnt));
solve();
cnt[1]=2;
printf("Case#%d:",ii);
for(inti=mm;i>=1;i--)
if(cnt[i]>=2)
{
printf("%d\n",i);
break;
}

}
return0;
}





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: