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;
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()
{
while(~scanf("%lld",&N))
{
ll i,j;
Ma.clear();
for(i=0;i<N;i++)
{
ll n;
scanf("%lld",&n);
Han(n);
}
it=Ma.rbegin();
for(i=1;i<=N;i++)
{
while(it->second<i)
it++;
printf("%lld\n",it->first);
putchar('\n');
}
}
return 0;
}