- 最后登录
- 2016-6-29
- 在线时间
- 128 小时
- 阅读权限
- 10
- 注册时间
- 2008-4-30
- 积分
- 171
- 帖子
- 132
- 精华
- 0
- UID
- 30495
- 性别
- 保密

- 积分
- 171
- 帖子
- 132
- 精华
- 0
- UID
- 30495
- 性别
- 保密
|
第二题做过。。。先不考虑含有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 编辑 ] |
|