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