Project Euler (Problem 20)
プロジェクト・オイラー、問題20。一応それらしきプログラムを作り、正しいような気がしていたが、環境によって答えが異なる。なんとまあ、全くもう。
ruby1.8.7が怪しいように思ったが、i686-linux版では正しいと思われる結果が出ている。さて、どうやって修正できるのやら。どうやって検証するのやら。長整数がきちんと扱える環境を使わねば。
ともあれ、cygwin上のrubyがlinux版の100倍遅いとは。。。。
(楽しい)。
#!/usr/bin/ruby N = 100def factorial( n )
if n <= 1 then
1
else
n * factorial( n- 1 )
end
endf = factorial( N )
print "factorial( ", N, " ) = ", f, "\n"sum = 0
f.to_s.split(//).each{ | s |
sum = sum + s.to_i
}print "sum = ", sum, "\n"
●ruby 1.9.3p385 (2013-02-06 revision 39114) [i386-cygwin]
real 0m1.249s
user 0m0.031s
sys 0m0.467s
factorial( 100 ) =
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
sum = 648
●ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
real 0m0.012s
user 0m0.004s
sys 0m0.004s
factorial( 100 ) = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
sum = 648
●ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
real 0m0.032s
user 0m0.006s
sys 0m0.010s
factorial( 100 ) = -103842843508756158358798687947847805639487006820789523464184759489820034626638828969890744868143583395759498188780474387766308770729164800000000000000000000
sum = 720
« 今週の戯れ歌 | Main | 演奏会のお知らせ »
Comments