・階乗数                                GAI 氏

 N=25!=1*2*3*・・・*25 で、これを素因数分解すれば、素数2は、

 2,4,6,・・・,24 から、12個 、4,8,12,16,20,24 から、6個

 8,16,24 から、3個 、16 から、1個で、計12+6+3+1=22個が集められるから、

 素数2の指数は22

 同じく素数3では、

 3,6,9,・・・,24 から、8個 、9,18 から、2個で計10個

 素数5なら、

 5,10,・・・,25 から、5個 、25 から、1個の計6個

という作業をいとわず行えば、

 25!=2^22*3^10*5^6*7^3*11^2*13*17*19*23

なる姿をみる。当然、これをすべて掛ければ、下位には「0」が5の指数に影響され
2^6*5^6=(10)^6より、0が6個並ぶものが出現する。

 そこで、その前にくる数字が何なのかを考えることにする。

 それには、N/10^6=2^16*3^10*7^3*11^2*13*17*19*23 での下1桁を求めることに対応
する。

 ここで、上記の2桁の素数に対しては一位の数 1,3,7,9(=3^2),3 だけに影響されるから、

全体では、2^16*3^14*7^4 を考えれば十分である。

 ここに、3*7=21の結果を引き起こすので、1は結果に影響を及ぼさないことを考慮すれば、
2^16*3^10 に絞られる。

 2^10*2^6*3*(3^3)^3など利用し下1桁だけに着目すれば

→4*4*3*7^3→6*7^2→6*9→4 で、4がいることを知ることができる。

(確認)
gp > 25!
%20 = 15511210043330985984000000

 この原理を一般化し、一般に、N!を計算したとき、0以外で始めに下桁から出現する数は何
かを探すことを試みる。

素因数分解では、5の姿は無くなり、残り奇素数1,3,7,9であるが、3と7はセットで潰してよく、9
は、3^2で処理できるので、結局判断は、P=2^a*3^b なるものだけに集約されることになる。

 そして、2は生き残っているので最終結果は2,4,6,8 のいずれかしか起こらない。

 今一位の数に着目すれば、

2->2
2^2->4
2^3->8
2^4->6
2^5->2
2-6->4
・・・
3->3
3^2->9
3^3->7
3^4->1
3^5->3
3^6->9
・・・

なので、それぞれが4の長さの循環を繰り返す。

 そこで、r1=Mod(a,4)、r2=Mod(b,4) から次の判定表をつくることができて

  r1:     0  1  2  3
   -------------------
  r2:0 |  6  2  4  8
     1 |  8  6  2  4
     2 |  4  8  6  2
     3 |  2  4  8  6


 そこで、Nに対して判断基準のPを次の式で構成する。

 Nを5進法で表し、N=a0+a1*5+a2*5^2+a3*5^3+・・・+an*5^n であるとき、

  P=6*Π[k=0,n]ak!*2^(k*ak)

とする。

(例1)N=25!

 25=1*5^2 から、P=6*1!*2^(2*1)=2^3*3

 これより、r1=3,r2=1で判定表から、4

(例2)N=100!

 100=4*5^2 から、P=6*4!*2^(2*4)=2^12*3^2

 r1=0,r2=2 で判定表から、4

(例3)N=212!

 212=2+2*5+3*5^2+5^3 から、

 P=6*(2!*2^0)*(2!*2^2)*(3!*2^6)*(1!*2^3)=2^15*3^2

 r1=3,r2=2 で判定表から、2

(例4)N=1234!

 1234=4+5+4*5^2+4*5^3+5^4 から、

 P=6*(4!*2^0)*(1!*2)*(4!*2^8)*(4!*2^12)*(1!*2^4)=2^35*3^4

 よって、r1=3,r2=0 で判定表から、8

→ <100!、212!、1234!の計算結果



                         投稿一覧に戻る