Description
集合 (S = {1,2,...,n}) 的一个子集 (M) 的不完美值等于 (max_{a,bin M} gcd(a,b)) 且 (a eq b),对于 (k =2,3,...,n),求满足 (|M|=k) 的所有 (M) 中不完美值的最小值。
Solution
对于一个子集,如果 (a,b in M) 且 (a mod b equiv 0),则删去 (a) 一定比删去 (b) 优
于是,若 (a) 在数列中,则 (a) 的所有约数一定在数列中,于是 ((a,b)=c) 时 (c) 一定存在
于是一个子集的答案就是其中所有数的最大真因子的最大值
直接 (O(nlog n)) 暴力预处理最大真因子,排序输出即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 500005;
int n,m,t,a[N];
signed main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=i+i;j<=n;j+=i)
{
a[j]=i;
}
}
sort(a+1,a+n+1);
for(int i=2;i<=n;i++)
{
cout<<a[i]<<" ";
}
}