階乗数の因数分解のアルゴリズムとその適用

 クヌース先生の『コンピュータの数学』は離散数学の宝箱のような本。

大きな階乗数n!因数分解したいときの効率的なアルゴリズムも載っている。

例としては、100!の素因数分解はこうなります。

 素数2を選んだらそのアルゴリズムはこんな感じ

       

Floor関数は切り下げする。これならば階乗を直接計算せずとも算出できる。早い!

1000!までを因数分解したのが下表のまとめ。

 ちょっと面白いことは2の指数がn以下の最大素数に近いことだろうか。

 100!では2の指数は97であり、最大素数は97だ。1000!では994と最大素数は997になる。下に抜き出したように10000!では2の指数は9995であり、最大素数は9973だ。

 

 

2の指数と最大素数の一致の傾向はかなり確からしい。100!から100億!までを調べてみました。

 

 

なんで、ほぼ一致するんでしょうね?

 

 

 

【参考文献】