P1414 又是毕业季II

1首先你要知道,N个数的最大GCD就是这N个数共同约数中最大的那个,用Map将一个约数出现的次数存起来(次数即为有多少个数中有着个约数),对每个数约数枚举,结果放到Map里面,最后输出的时候,倒着找符合条件的约数即可,最后一点很重要,就是N越大,他的最大GCD会越小,所以复杂度是远远小于N*(Map.size())的

#pragma GCC optimize(2)
#include<bits/stdc++.h>

using namespace std;

#define pi acos(-1.0)
#define e exp(1.0)
typedef long long ll;
const ll maxn=1e4+7;
ll N;
map<ll,ll>Ma;
map<ll,ll>::reverse_iterator it;
//inline ll read()
//{
// ll X=0; bool flag=1; char ch=getchar();
// while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
// while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
// if(flag) return X;
// return ~(X-1);
//}
//inline void write(ll X)
//{
// if(X<0) {X=~(X-1); putchar('-');}
// if(X>9) write(X/10);
// putchar(X%10+'0');
//}
void Han(ll n)
{
	ll i,j;
	for(i=1;i*i<=n;i++)
	{
		if(n%i==0)
		{
			Ma[i]++;
			if(i!=n/i)
			Ma[n/i]++;
		}
	}
	return ;
}
int main()
{
// freopen(".../.txt","w",stdout);
// ios::sync_with_stdio(false);
	while(~scanf("%lld",&N))
	{
		ll i,j;
		Ma.clear();
		for(i=0;i<N;i++)
		{
			ll n;
			scanf("%lld",&n);
// n=read();
			Han(n);
		}
		it=Ma.rbegin();//只需赋值一次 
		for(i=1;i<=N;i++)
		{
			while(it->second<i)
			it++;
// write(it->first);
			printf("%lld\n",it->first);
			putchar('\n');
		}
	}
	return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 16:15
你知道对于一个平常不接电话,从来不发语音,只打字交流的人来说电话面有多恐怖吗....刚刚亲眼目睹了舍友电话面...她甚至还在吃饭...就这么水灵灵的打过来开始问了...感觉如果是面对面我真的会紧张到跪下来给面试官磕一个...
一只ikun:额,其实没那么恐怖,最难迈开的是第一步,相信我,你面完第一次后面就不怕了。第一次面试我还想着找个自习室面试,到后面我打着游戏突然来电话我就直接面试了
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务