10進BASIC のプログラムを用いた、
第5フェルマー数 r
は素数でない事の証明。
2^(2^5) = 2^(32) = 4294967296
r = 2^(32)+1 = 4294967297
3 と r は互いに素である [ 2=-1(mod 3) より r = 2^(32)
+ 1 = (-1)^32 + 1 = 2 (mod 3) なので、r は 3
で割り切れないから]。
もし r
が素数だったら、フェルマーの小定理より、
A = 3^(r-1) を r で割った余りは 1
になるはずである!!
A = 3^(r-1) = 3^(2^(32)) を r
で割った余りを求めたい。
A = 3^(2の32乗) = 3^(2*2*2*2*2*........*2) =
(........(((3)^2)^2)^2........) に注目。
下記の 10進BASIC(文教大学 白石和夫氏製作のWINDOWSで走る言語)
でのプログラムを走らせる[ 3 を何回も 2乗する。2乗するたびごとに、r
で割った余りで置き換え、桁数が上がるのを防ぐ]。
**************************
LET a=3
for I=1 to 32
LET a=a^2
LET a=a-Int(a/(4294967297))*4294967297
next I
print a
END
**************************
注:a-Int(a/(4294967297))*4294967297 は、a を 4294967297
で割った余りになる [a-(a/rの商)*r だから]。
計算結果より、A を r で割った余りは
2931268275となる。すなわち1ではない。
よって、r は素数でない!
(証明終り)
訂正: 山内紀夫氏は、10進Basicで、例えば 4294967297^2 を計算すると、有効数字15桁に丸められるため、「上記のプログラムは正しいが、出力された2931268275 は誤りである」と指摘された。ここに感謝する。読者自ら対応を考えられたい。(私は、コピーレフトの考えに賛同する者であり、フリーソフト愛好者である。有料プログラムは使いたくない。)