難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

GCD Escape

作成者 mackerel38

テスター yukimy32

難易度(作成者設定) Lv.5

難易度(投票) 未投票 (0票)

実行時間制限
2 秒
メモリ制限
512 MiB

解説

非負整数 xx に対して、f(x)f(x) を

f(x)=gcd⁡(x,M)f(x)=\gcd(x,M)

と定義する。

操作では xx が減少し、かつ f(x)f(x) の値が変わる必要がある。

ここで、KM,KM−1,…,0KM,KM-1,\ldots,0 の順に f(x)f(x) を考える。

f(x)f(x) の値が変わらない範囲では、高々 11 個までしか選ぶことができない。また、f(x)f(x) の値が変わるたびに、その範囲の最小の整数を選べば常に操作できる。

よって答えは、1≤x≤KM1\le x\le KM のうち

f(x)≠f(x−1)f(x)\ne f(x-1)

となる xx の個数である。

連続する 22 整数は互いに素なので、

f(x)=f(x−1)  ⟺  f(x)=f(x−1)=1f(x)=f(x-1)\iff f(x)=f(x-1)=1

が成り立つ。

また、f(x)f(x) は周期 MM である。したがって、1≤x≤M1\le x\le M において f(x)=f(x−1)=1f(x)=f(x-1)=1 を満たす xx の個数を CC とすると、答えは

K(M−C)K(M-C)

となる。

MM を素因数分解して

M=∏i=1rpieiM=\prod_{i=1}^{r}p_i^{e_i}

とする。

f(x)=f(x−1)=1f(x)=f(x-1)=1 となるための必要十分条件は、すべての ii について

x≢0,1(modpi)x\not\equiv 0,1\pmod{p_i}

となることである。

pieip_i^{e_i} を法としたとき、この条件を満たす余りは piei−1(pi−2)p_i^{e_i-1}(p_i-2) 個ある。

よって、各素因数について考えることで、

C=∏i=1rpiei−1(pi−2)C=\prod_{i=1}^{r}p_i^{e_i-1}(p_i-2)

となる。ただし、M=1M=1 の場合は C=1C=1 となる。

以上より、試し割りを用いることで、 O(M)O(\sqrt M) でこの問題を解くことができる。

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。