循環小数 その2

さて。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まで)桁の整数を扱えて、剰余を求める演算も可能にする・・・というのは結構ハードル高くないか?

・・・難しい!超多倍長整数の除算を高速に・・・ってもはや専門知識が必要な分野なのでは?うぐぅ