難易度評価

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

難易度(投票) Lv.7.7 (3票)

投票の分布
  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.71票
  8. Lv.82票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

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

外部サイトへ移動します

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

別タブで開く

Fibonacci-th Fibonacci

作成者 taiki0715

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

難易度(投票) Lv.7.7 (3票)

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

解説

mod MM のフィボナッチ数列の周期をf(M)f(M)とします。M=998244353M=998244353から始めてMMをf(M)f(M)で置き換える操作を繰り返すと

998244353→1996488708→27710040→2341560→32760→1680→240→120\begin{aligned} 998244353 \to 1996488708\to 27710040 \\ \to2341560\to32760\to1680 \to240\to120 \end{aligned}

と変化し、120120以降は120120がループすることが分かります。g(N,K,M)g(N,K,M)をこの問題の答えをMMで割った余りとすると、

g(N,K,M)={Fg(N,K−1,f(M))mod Mif K>0Nmod Mif K=0g(N,K,M)= \begin{cases} F_{g(N,K-1,f(M))}\quad mod\, M & \text{if K>0}\\ N \quad mod\, M & \text{if K=0} \end{cases}

となります。また、f(M)=Mf(M)=Mの時はx→Fxx\to F_xをZ/MZ\mathbb{Z}/M\mathbb{Z}上の写像と見て繰り返し二乗法をするとO(Mlog⁡K)O(M\log K)で計算できます。 f(M)f(M)の計算方法は、M=∏kpkekM=\prod_k p_k^{e_k}とすると

f(M)=lcm(f(p1e1),f(p2e2),…,f(pkek))f(M)=lcm(f(p_1^{e_1}),f(p_2^{e_2}),\ldots,f(p_k^{e_k}))

です。また、

f(pe)∣pe−1f(p)f(p^e)|p^{e-1}f(p)

であり、

f(p)={20if p=5p−1if p=1,4 mod 52(p+1)if p=2,3 mod 5f(p)= \begin{cases} 20 & \text{if p=5}\\ p-1 & \text{if p=1,4 mod 5}\\ 2(p+1) & \text{if p=2,3 mod 5} \end{cases}

となります。 f(pe)=pe−1f(p)f(p^e)=p^{e-1}f(p)として計算しても正しく答えを求められます。

ユーザー解説

ユーザー解説を書く

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