« 今週の戯れ歌 | Main | 演奏会のお知らせ »

Project Euler (Problem 20)

プロジェクト・オイラー、問題20。一応それらしきプログラムを作り、正しいような気がしていたが、環境によって答えが異なる。なんとまあ、全くもう。

ruby1.8.7が怪しいように思ったが、i686-linux版では正しいと思われる結果が出ている。さて、どうやって修正できるのやら。どうやって検証するのやら。長整数がきちんと扱える環境を使わねば。

ともあれ、cygwin上のrubyがlinux版の100倍遅いとは。。。。

(楽しい)。

#!/usr/bin/ruby
N = 100

def factorial( n )
if n <= 1 then
1
else
n * factorial( n- 1 )
end
end

f = 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

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference Project Euler (Problem 20):

« 今週の戯れ歌 | Main | 演奏会のお知らせ »