魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
楼主: lulijie
打印 上一主题 下一主题

关于1000的阶乘的问题 [复制链接]

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
11#
发表于 2009-8-31 00:19:14 |只看该作者
不要强算,有没有办法可以算出最后一位非0数字是2?

使用道具 举报

银魔

狼情野性

Rank: 7Rank: 7Rank: 7

积分
4202
帖子
1961
精华
8
UID
8227
兴趣爱好
速度
破解

国家(地区)纪录(NR) 八年元老

12#
发表于 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
一剑凌云山海情
弃剑封刀,大隐归闹市,自觉逍遥。
我的成绩

使用道具 举报

银魔

狼情野性

Rank: 7Rank: 7Rank: 7

积分
4202
帖子
1961
精华
8
UID
8227
兴趣爱好
速度
破解

国家(地区)纪录(NR) 八年元老

13#
发表于 2009-8-31 01:13:06 |只看该作者
關於最後一位的計算,應該可以用每一個數的最後一位非零數字(把末尾的零全去掉)相乘得到,在計算過程中只截取結果的最後一位非零數字進行下一次計算
一剑凌云山海情
弃剑封刀,大隐归闹市,自觉逍遥。
我的成绩

使用道具 举报

Rank: 1

积分
171
帖子
132
精华
0
UID
30495
性别
保密
14#
发表于 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 编辑 ]

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
15#
发表于 2009-8-31 19:34:10 |只看该作者
14楼:可以用你的方法检验一下n取较小值时,答案正确不正确。

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
16#
发表于 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?

使用道具 举报

Rank: 1

积分
171
帖子
132
精华
0
UID
30495
性别
保密
17#
发表于 2009-8-31 19:54:19 |只看该作者
12也是取尾数的,就是2,2 / 2 = 6,6 / 2 = 8

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
18#
发表于 2009-8-31 19:58:56 |只看该作者
是这样么:
2/2=6
6/2=8
8/2=4
4/2=2

使用道具 举报

Rank: 1

积分
171
帖子
132
精华
0
UID
30495
性别
保密
19#
发表于 2009-8-31 20:01:19 |只看该作者
对,就是这样.....

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
20#
发表于 2009-8-31 20:09:18 |只看该作者
f(49)=f(9)*f(9)*6/2^1=6*6*6/2=6/2=8
而49!=608281864034267560872252163321295376887552831379210240000000000

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-6-16 04:01

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部