さて。2^31-1は素数らしいので、当然10とも互いに素でしょう。とすると、10^e≡1 (mod 2147483647)となる最小のeが循環節の長さになるわけですが・・・。
for(i in 1:100){ print(paste(i, ":", (10**i)%%2147483647), sep="") } [1] "1 : 10" [1] "2 : 100" [1] "3 : 1000" [1] "4 : 10000" [1] "5 : 1e+05" [1] "6 : 1e+06" [1] "7 : 1e+07" [1] "8 : 1e+08" [1] "9 : 1e+09" [1] "10 : 1410065412" [1] "11 : 1215752238" [1] "12 : 1420104145" [1] "13 : 1316139568" [1] "14 : 276493798" [1] "15 : 617454333" [1] "16 : 1879576036" [1] "17 : 1615891184" [1] "18 : 1126526311" [1] "19 : 527844875" [1] "20 : 983481456" [1] "21 : 1244880000" [1] "22 : 1711381504" [1] "23 : 2073042944" [1] "24 : 1470169088" [1] "25 : 743440384" [1] "26 : 989855747" [1] "27 : 1275068402" [1] "28 : 378" [1] "29 : 2147483331" [1] "30 : 29600" [1] "31 : 33792" [1] "32 : 3485696" [1] "33 : 18087936" [1] "34 : 2059665408" [1] "35 : 1270874112" [1] "36 : 1979711488" [1] "37 : 268435456" [1] "38 : 0" [1] "39 : 0" [1] "40 : 0" ..
素数なんだから余りが0になるわけないじゃん。うーん、どうやら越えてはいけない壁を越えてしまったようです。どうしよう。
任意の(今回は10^2147483647まで)桁の整数を扱えて、剰余を求める演算も可能にする・・・というのは結構ハードル高くないか?