魔方吧·中文魔方俱乐部
标题:
关于1000的阶乘的问题
[打印本页]
作者:
lulijie
时间:
2009-8-30 20:19:32
标题:
关于1000的阶乘的问题
关于1000的阶乘:
1. 末尾有几个0?
2. 去掉末尾所有的0后最后一位是什么数字?
3. 写成质因数的幂的乘积的形式又是什么? 比如 360=2^3 * 3^2 * 5^1
------------------------------
由于1000以内的素数太多,第3题计算起来比较繁琐。
第3题就改为
求100!的质因数的幂的乘积的形式。
[
本帖最后由 lulijie 于 2009-8-31 00:10 编辑
]
作者:
Osullivan
时间:
2009-8-30 20:52:40
这个问题计算机和数学可解?
~~~~~~~~~~
作者:
lulijie
时间:
2009-8-30 20:55:51
不要用计算机来解。
作者:
lulijie
时间:
2009-8-30 22:41:59
算第三题,要用到1000以内的所有素数,提供如下:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293
307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397
401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499
503 509 521 523 541 547 557 563 569 571 577 587 593 599
601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691
701 709 719 727 733 739 743 751 757 761 769 773 787 797
809 811 821 823 827 829 839 853 857 859 863 877 881 883 887
907 911 919 929 937 941 947 953 967 971 977 983 991 997
作者:
stonesmith322
时间:
2009-8-30 22:49:52
第一个最后有多少零很简单啊 只要考虑5就好了 有一个5就有一个零 有两个就有两个零 比如25就是在末尾添上两个零
作者:
骰迷
时间:
2009-8-30 23:02:57
理解題目有點困難,原來是1000!
第一題是不是249?
第二題是不是6?
作者:
lulijie
时间:
2009-8-30 23:09:50
第一题=[1000/5]+[1000/25]+[1000/125]+[1000/625]=200+40+8+1=249
所以楼上正确。
不过第2题不对。
作者:
oyyq99999
时间:
2009-8-30 23:21:30
貌似拿計算機來解也沒什麽問題,就計算1000次嘛,正好我有個高精度計算器,待我改一下來算他一算
作者:
oyyq99999
时间:
2009-8-31 00:14:32
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
作者:
oyyq99999
时间:
2009-8-31 00:16:05
第一個問題,最後有249個零
第二個問題,最後一位是2
至於第三個問題,解決思路應該是通過對2到1000這999個數分別進行質因數分解,然後再統計,我可以試一下。。。
第三個問題最後結果在12樓
[
本帖最后由 oyyq99999 于 2009-8-31 00:57 编辑
]
作者:
lulijie
时间:
2009-8-31 00:19:14
不要强算,有没有办法可以算出最后一位非0数字是2?
作者:
oyyq99999
时间:
2009-8-31 00:56:39
1000!=2^994*3^498*5^249*7^164*11^98*13^81*17^61*19^54*23^44*29^35*31^33*37^27*41^24*43^23*47^21*53^18*59^16*61^16*67^14*71^14*73^13*79^12*83^12*89^11*97^10*101^9*103^9*107^9*109^9*113^8*127^7*131^7*137^7*139^7*149^6*151^6*157^6*163^6*167^5*173^5*179^5*181^5*191^5*193^5*197^5*199^5*211^4*223^4*227^4*229^4*233^4*239^4*241^4*251^3*257^3*263^3*269^3*271^3*277^3*281^3*283^3*293^3*307^3*311^3*313^3*317^3*331^3*337^2*347^2*349^2*353^2*359^2*367^2*373^2*379^2*383^2*389^2*397^2*401^2*409^2*419^2*421^2*431^2*433^2*439^2*443^2*449^2*457^2*461^2*463^2*467^2*479^2*487^2*491^2*499^2*503^1*509^1*521^1*523^1*541^1*547^1*557^1*563^1*569^1*571^1*577^1*587^1*593^1*599^1*601^1*607^1*613^1*617^1*619^1*631^1*641^1*643^1*647^1*653^1*659^1*661^1*673^1*677^1*683^1*691^1*701^1*709^1*719^1*727^1*733^1*739^1*743^1*751^1*757^1*761^1*769^1*773^1*787^1*797^1*809^1*811^1*821^1*823^1*827^1*829^1*839^1*853^1*857^1*859^1*863^1*877^1*881^1*883^1*887^1*907^1*911^1*919^1*929^1*937^1*941^1*947^1*953^1*967^1*971^1*977^1*983^1*991^1*997^1
作者:
oyyq99999
时间:
2009-8-31 01:13:06
關於最後一位的計算,應該可以用每一個數的最後一位非零數字(把末尾的零全去掉)相乘得到,在計算過程中只截取結果的最後一位非零數字進行下一次計算
作者:
zxl0714
时间:
2009-8-31 19:24:43
第二题做过。。。先不考虑含有5因数的数,这样n!只需考虑个位即可,所以n!可以分为[ n / 10 ]个10!和( n mod 10 )!,而不含5因数的10!的尾数都是6,所以只需考虑( n mod 10 )!的尾数。
列一个表t( n ) = { 1, 1, 2, 6, 4, 4, 4, 8, 4, 6 } ( 0 <= n < 10 )
要提出因数5,一次可提出[ n / 5 ]个,这样要找[ n / 5 ]个2与之配对,就是将计算出的不含5的尾数除以2 ^ [ n / 5 ],注意由于除了0!和1!外所有阶乘的最后一位都为偶数,所以2 / 2 = 6,6 / 2 = 8,注意到除以2以后的变化是4个以循环,所以只需除以[ n / 5 ] mod 4个2即可。由于被提出因数5的那些数还没有计算完,所以要继续计算它的尾数,即[ n / 5 ]!的尾数,然后和原来的相乘就是n!的尾数。这样有一个递推关系
f( n ) = f( [ n / 5 ] ) * t( n mod 10 ) * 6 / 2 ^ ( [ n / 5 ] mod 4 )
不知道我讲清楚没有。
f( n ) = { 1, 1, 2, 6, 4, 2, 2, 4, 2, 8 } ( 0 <= n < 10 )
[
本帖最后由 zxl0714 于 2009-8-31 21:36 编辑
]
作者:
lulijie
时间:
2009-8-31 19:34:10
14楼:可以用你的方法检验一下n取较小值时,答案正确不正确。
作者:
lulijie
时间:
2009-8-31 19:42:46
比如n=11 11!=39916800
f(11)=f(2)*f(1)*6/2^2=2*1*6/4=12/4=?
=8? =3?
作者:
zxl0714
时间:
2009-8-31 19:54:19
12也是取尾数的,就是2,2 / 2 = 6,6 / 2 = 8
作者:
lulijie
时间:
2009-8-31 19:58:56
是这样么:
2/2=6
6/2=8
8/2=4
4/2=2
作者:
zxl0714
时间:
2009-8-31 20:01:19
对,就是这样.....
作者:
lulijie
时间:
2009-8-31 20:09:18
f(49)=f(9)*f(9)*6/2^1=6*6*6/2=6/2=8
而49!=608281864034267560872252163321295376887552831379210240000000000
作者:
zxl0714
时间:
2009-8-31 21:34:34
郁闷。。。我写错了,现在改好了。。
作者:
lulijie
时间:
2009-8-31 21:57:11
很好!
不错!
不过可以把公式写的规范一些,像2/2=6,6/2=8之类的毕竟不太正规。
作者:
ukyo502
时间:
2009-9-10 09:21:56
用强大的计算机CPU把结果算出来就是了~~推荐用python语言,嘿嘿
作者:
zxl0714
时间:
2009-9-11 12:39:11
楼上太搞笑了。。。。这题给的数据是小了点,如果再大一点,比如1000000,朴素算法就不好用了,复杂度要O( n^2 )(普通高精度乘法),再往上就要用快速傅里叶变换了,但是复杂度也只能到O( nlogn )。这题只需计算最后有多少0,不用计算具体数,所以我们可以用人脑列出一个递推公式,使得算法复杂度降到O( n ),所以不能依赖CPU。
还有为什么要用python,python在效率上比起c要差的远,虽然比较好编。
作者:
网罟双星
时间:
2009-9-17 09:08:08
汗...出现个用穷举法的...不过这是我的最爱!哈哈
欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/)
Powered by Discuz! X2