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!の計算結果>