2019年4月23日火曜日

5! * 6! = 10!

Fermer's Libraryの先日のツイートを受けて,tsujimotterさんが階乗数の間の関係式というブログ記事を書いている。そこでは,rubyのコードで n=200以下で  n!=a! b! となる自明でない,(n, a, b) の組を計算している。自明な組とは, (n, 0, n), (n, 1, n),(n!, n!-1, n) などのことである。これを juliaで計算してみた。

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)

0 件のコメント: