计算阶乘n!末尾所含0的个数

来源:互联网 发布:深圳太极软件 编辑:程序博客网 时间:2024/04/29 05:01

 

问题描述
给定参数n(n为正整数),请计算n的阶乘n!末尾所含有“0”的个数。
例如,5!=120,其末尾所含有的“0”的个数为1;10!= 3628800,其末尾所含有的“0”的个数为2;20!= 2432902008176640000,其末尾所含有的“0”的个数为4。

计算公式
这里先给出其计算公式,后面给出推导过程。
令f(x)表示正整数x末尾所含有的“0”的个数,则有:
   当0 < n < 5时,f(n!) = 0;
   当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。

问题分析
显然,对于阶乘这个大数,我们不可能将其结果计算出来,再统计其末尾所含有的“0”的个数。所以必须从其数字特征进行分析。下面我们从因式分解的角度切入分析。

我们先考虑一般的情形。对于任意一个正整数,若对其进行因式分解,那么其末尾的“0”必可以分解为2*5。在这里,每一个“0”必然和一个因子“5”相对应。但请注意,一个数的因式分解中因子“5”不一定对应着一个“0”,因为还需要一个因子“2”,才能实现其一一对应。

我们再回到原先的问题。这里先给出一个结论:
结论1: 对于n的阶乘n!,其因式分解中,如果存在一个因子“5”,那么它必然对应着n!末尾的一个“0”。
下面对这个结论进行证明:
(1)当n < 5时, 结论显然成立。
(2)当n >= 5时,令n!= [5k * 5(k-1) * ... * 10 * 5] * a,其中 n = 5k + r (0 <= r <= 4),a是一个不含因子“5”的整数。
对于序列5k, 5(k-1), ..., 10, 5中每一个数5i(1 <= i <= k),都含有因子“5”,并且在区间(5(i-1),5i)(1 <= i <= k)内存在偶数,也就是说,a中存在一个因子“2”与5i相对应。即,这里的k个因子“5”与n!末尾的k个“0”一一对应。
我们进一步把n!表示为:n!= 5^k * k! * a(公式1),其中5^k表示5的k次方。很容易利用(1)和迭代法,得出结论1。

上面证明了n的阶乘n!末尾的“0”与n!的因式分解中的因子“5”是一一对应的。也就是说,计算n的阶乘n!末尾的“0”的个数,可以转换为计算其因式分解中“5”的个数。

令f(x)表示正整数x末尾所含有的“0”的个数, g(x)表示正整数x的因式分解中因子“5”的个数,则利用上面的的结论1和公式1有:
   f(n!) = g(n!) = g(5^k * k! * a) = k + g(k!) = k + f(k!)
所以,最终的计算公式为:
当0 < n < 5时,f(n!) = 0;
当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。

计算举例
f(5!) = 1 + f(1!) = 1
f(10!) = 2 + f(2!) = 2
f(20!) = 4 + f(4!) = 4
f(100!) = 20 + f(20!) = 20 + 4 + f(4!) = 24
f(1000!) = 200 + f(200!) = 200 + 40 + f(40!) = 240 + 8 + f(8!) = 248 + 1 + f(1) =249
...

 

 

2008! = 864364185767107020525555785744913866947705402855234129109030596928161811
30349289654529502697509195384231172407798480676210473050254653691699885279619245
95282259401273439081245874835327256481869830604046872668665535525324052381293501
57966948127554609294966898648555268016524062496297607783419200275359981112108455
85964312245693430012395000661489449928161006308033871728370145842246861435772708
33503862200508826573800166011068653824559144279224109587122851968383695522166659
10823010007114025783166152459125033034810634843601942911554750952514795325689852
01843715592475296563523965687904014012277135693563336958691836319444117997054946
85023371202943497849573399009022642650218658920509219870642049135908426617170399
68938029081887572750037054519668987544266265405040228775913400135373608163926252
85550205556674469154535014420626307845473997558226565852647783174137467009137094
59339385751374862604274354598201169640634514444139944655102100737742939802758802
50784149026189258771741091787136165858838131274412158177445379848553987227287318
35030978830425196401370289991477269886035396799071879482695065001236211551469108
13025614597551287814406443483433437308671059084571075135822060243761817058914294
76882833817846566398722449352555668276644605084799757015795294347576420656789473
95386984845744346685582774364492480219196423141762909953312579045507499275924487
17204785068889390480549695110671357342620580497478727596286312261464984651347795
65827669569067730492908605207384595171362920907706805939480105059960681023739479
36258241209566250186095013872603462999109326053258345530862617052441013778446303
28793699179176374298473936138092462327728033178830353836075930434485894125748801
90306053365897329505756043428179920712197945273706408611232383017307444018485459
40145960901606555558946416648902885833103387278242425171929954205560372493987394
26364459429823504618527663055342825321495727192596238131050111409064252459339972
04272802648402546000121760863277457591641301166924298806452499256745265725345061
35896743526501234409624632090110527982616742323819443555752358238517825021925542
07329013332066802048771787062030658895164543415003624617078166405481328213194716
83115509678587192166651607674890749711987448761069193366805844736137727178559919
69058562481629694565905839682691742925454042012086650317697125503855691538838461
03576448134780323963509879547317751290661148443126308299449519549837786372160989
04441275035722077001533915518501363056080352226142913805840505370561197494768160
87800085245882225242031698925903699326408071302699879908568007093205806603442944
96186197305445225936764110875312864755366210177725244840127559088424076199528718
19633398499561006182240185690626746755297099234319071949906381168017171986012853
38686641138617095674661597070763512310914724726885367302158783017861151308558718
64204762656720287905955132053380798470390079176098911594105563661565798237382533
52146953445138767397782041126496738798636606634442630262261696513417946933965164
54208886956564801050963513875083227186461611789287959865051487896052042016184267
43416179555547857326232973016802540848310081831069927926917863779098655803317629
31015270317184605723983309184499442459302097239277586929716173938946244591373719
62064966418709908292002436251528962853185187569850000279031611239980870151403162
68999938323527012195240924499877946136983459145255013025426891680326054850873327
80350825308762888796876458287695397527715477006159223525722034913417217412563626
07822359501863305940628945023919326327437252032293952678761393051391203518166386
00619944426312868930887466078693260266706883214852619802473893839624677974984490
48536486309775220630138651944174680437865013560342519229140167073572046207641535
68601821272169208957251576372861357091345967702160527466166478955380088730675601
45920520663426978607723535061523576062603932595002590772916409505831439681485614
82349363604163330329889444061601312369122943826939962160393707535607018615956978
79975938657188335301827507508063645396334348681402713815806614829629274666329563
01306147995413505497351542603693650167796159236715536802438145089125132541047720
53963270177752564919466470757207792563425677319285091229123330445251057126988801
92889400166721123125103407568627276005753706590784666942672410697818381317060772
52316452257163591310887953106600354473516249471302120440926066073985272690907695
89105280047448566016254494912513629027564171920301337782184708332062997016401761
32133643851413170004909388617805775572654075230351717777713864837969537814491762
74130751100889633055140316767928472059082681796963653691037727121914182766830576
31715015548207215809341517152427724526962705788814625638884232527066664257545092
63011477580486648310418050276983946893813040436904052974195883249053853674931443
28955568614817793362584467811936189210507222432246380775128285421761016768314613
66851696059162047807583199523000843218715449137876797926691962136892186412560621
63432971676954007227178698431081344335589082515718828012892951669544226914300286
83831764580081721367238692903135428898911229632240920378516525484256691646951322
31381343781375187744079090238006092312682758648276401242138945390549531008004699
52255731863332460263060949662017734372213076687369778402830809043730023746066167
83652310114970707230303313280053798864118475140009150456037527582146560000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000

原创粉丝点击