题目链接
(solution)
暴力求每个数有多少个倍数,从大到小,数(i)的倍数有(f_i)个,那么选(1)~(f_i)个同学的答案可以为(i),取第一次更新的答案最大
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int MAXN=1000010;
int n,a[MAXN],f[MAXN],ans[MAXN];
int Max=0;
int main()
{
scanf("%d",&n);
int x;
for(int i=1;i<=n;++i){
scanf("%d",&x);
++a[x];
Max=max(Max,x);
}
for(int i=Max;i>=1;--i)
for(int j=i;j<=Max;j+=i)
f[i]+=a[j];
int r=0;
for(int i=Max;i>=1&&r<=n;--i)
if(f[i])
while(r+1<=f[i]) ans[++r]=i;
for(int i=1;i<=n;++i)
printf("%d
",ans[i]);
return 0;
}