上記はフェルマーテストについてのSICPの記述を転記したものです。gaucheでフェルマーテストを書く前に、rubyでフェルマーテストを実装して、「ああ、なるほど」と理解を深めました。そのときのコードを貼り付けておきます。何かの参考になれば幸いです。
#!/usr/bin/ruby
def FermatTest (n, a)
if( a == (exp(a, n) % n) ) then
puts n.to_s + " is prime.\n"
end
end
def exp (a, n)
return 1 if n == 0
t = a
(n - 1).times { |i|
a = a * t
}
a
end
1000.times {|i|
FermatTest(i, rand(i - 1) + 1) if i > 2
}「3 ~ 1000」の範囲の整数に対してフェルマーテストを行うことができます。
