rubyのコードがわかりにくいと思った原因は,階乗の計算のオーバーフローを避けるために,n! を素因数分解した素数の積で表現していたからだったか。以下のjuliaプログラムではBigIntを使ってこの課題をスキップしてしまった。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
f=ones(BigInt,1000)
function fct(n,f)
for i in 2:n
f[i]=BigInt(i)*f[i-1]
end
end
function bin(n,f)
for k in 2:n
for i in 2:n-1, j in i:n
if(f[k]==f[i]*f[j])
println(i,"! * ",j,"! = ",k,"!")
end
end
end
end
n=1000
fct(n,f)
@time bin(n,f)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3! * 5! = 6!
6! * 7! = 10!
4! * 23! = 24!
5! * 119! = 120!
6! * 719! = 720!
2017.072241 seconds (1.50 G allocations: 476.873 GiB, 2.13% gc time)
6! * 7! = 10!
4! * 23! = 24!
5! * 119! = 120!
6! * 719! = 720!
2017.072241 seconds (1.50 G allocations: 476.873 GiB, 2.13% gc time)
0 件のコメント:
コメントを投稿