Codeforces Round #632 (Div. 2) F. Kate and imperfection
問題概要
正整数 が与えられ、集合 と定める。要素数2以上である の部分集合 について、 の値を「 に含まれる相異なる2要素 に対する の最大値」と定める。
に対して、要素数が である の部分集合 についての の最小値を求めよ。
制約
解法
色々考え方があるとは思いますが、まずは として考えるべきものの範囲を絞ります。
仮に集合 にある値 が含まれず、かつ の倍数 が含まれているとします。このとき を に置き換えると、要素数は変わらず、 の値は変わらないか減少します。
この置き換え操作を有限回繰り返すと、 を増やすことなく、このような の組が存在しないような集合に変換することができます。つまり考えるべき はこのような が存在しないものに限定することができます。
これは言い換えると、1より大きい値 について「 自身より小さい の約数が全て に入るまでは、 が に追加されることはない」と考えてしまって良い、ということです。以降は、このルールに従って構成した集合だけを考えることにします。
このルールに従うと、集合 に を追加する時点で には の倍数は含まれず、 より小さい の約数は必ず含まれています。つまり より小さい最大の約数を とすると、値 を追加することで は に置き換えられます。
そのため の値を小さく保ちながら のサイズを増やすには、まず を入れ、その後 が小さい値から順番に追加していくのが最適になります。具体的には、
- : と素数だけを含む
- :上記と を含む
- :上記と を含む
という感じになります。あとは各値 について を計算し適切にシミュレーションなどをすることで答えを求めることができます。