Codeforces Round #632 (Div. 2) F. Kate and imperfection(数学+贪心)

添加链接描述
在这里插入图片描述
题意: 在1~n的n个数中,对于k∈[2,n],在n个数中取k个数,对这k个数两两进行gcd,输出这个gcd最小的最大值。
思路:我们尽可能选质数加入集合,如果质数不够呢就选因子只含2的倍数,再不够的时候再3的倍数,这个过程用埃式筛维护。
比赛的时候可能有点难想,但还有个更直接的,你可以1到10打个表,从后往前看,你发现

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+1;
int n,ans[maxn];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i) ans[i]=1;
	for(int i=2;i<=n;++i) for(int j=2*i;j<=n;j+=i) ans[j]=i;
	sort(ans+1,ans+1+n);
	for(int i=2;i<=n;++i) printf("%d ",ans[i]);
}
发布了391 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/105458713