コードフォース1333 F.ケイトと不完全

ここに画像の説明を挿入

トピック:

コレクション内 S = 1 2 S = {1,2、⋯、n} 、各正の整数 k k のサイズを見つける k k のサブセットは、このサブセット内の2つのペア間の最大共通因子の最大値を最小にし、この最小値を見つけます。

2つのペア間の最大公約数の最大値と最小値を使用してセットを作成する方法を検討します。まず、すべての素数をセットに投入し、次に、セット内の数値で最大公約数を設定する必要があります。 = 2 = 2 が投入されて = 3 = 3 ...次に、合成数を追加する場合、彼のすべての因子がすでにセットに含まれている必要があるため、この追加された数が生成できる最大の共通因子は最大の因子であるため、ふるいを使用します。この貪欲なプロセスを維持するには、出力を1回ソートするだけです。

ACコード:

int n, m;
int main()
{
	sd(n);
	vector<int> ans(n + 1, 1); //ans包含n+1个值为1的元素。
	rep(i, 2, n)
	{
		for (int j = 2 * i; j <= n; j += i)
		{
			ans[j] = i;
		}
	}
	sort(ans.begin(), ans.end());
	rep(i, 2, n)
		printf("%d%c", ans[i], i == n ? '\n' : ' ');
	return 0;
}

786の元の記事を公開 460を賞賛 240,000ビュー

おすすめ

転載: blog.csdn.net/qq_43627087/article/details/105402480