以文本方式查看主题 - W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL (http://bbs.xml.org.cn/index.asp) -- 『 算法理论与分析 』 (http://bbs.xml.org.cn/list.asp?boardid=60) ---- 求N!的最后一位非0位 (http://bbs.xml.org.cn/dispbbs.asp?boardid=60&rootid=&id=56765) |
-- 作者:hitlyq -- 发布时间:12/14/2007 11:04:00 PM -- 求N!的最后一位非0位 今有一个数N,数值较大,为0~10^1000,求其阶乘的最后一非0位,输出其值 sample : input :0 1 5 10 output:1(0!=1) 1(1!=1) 2(5!=120) 8(10!=3628800) 数值很大,应该没人直接求其阶乘再判断吧.大家给个好方法,期待中................ |
-- 作者:njurain -- 发布时间:12/20/2007 8:07:00 PM -- 你可以这么做: 写成: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 。。。。。 X1 X2..... 多少行很容易知道;[N/10] 当然,你可以用数论的知识更快的做; |
-- 作者:homeren0215 -- 发布时间:1/13/2008 9:31:00 PM -- 令r= N mod (『N/100『 * 100) 如果 r=0, 那么最后一位非零位是8 如果 r in (1-9) 则计算s = 8 × r!, 如果 r in (1-19),则计算s = 4 * (r-10)!, 如果 r in (1-29), 则计算s = 2 *(r-20)!*2, 如果 r in (1-39),则计算s = 6*(r-30)!*2*3, 如果 r in (1-49), 计算s = 8*(r-40)!*2*3*4, 如果r in (1-59), 计算 s = 4*(r-50)!*2*3*4*5, .... 如果r in(1-99),则计算s=4×(r-90)!×9! 最终,N!的最后一个非零位是s的最后一位非零位 |
-- 作者:caruru331 -- 发布时间:1/17/2008 1:42:00 AM -- 楼上的方法复杂度是指数级的 |
-- 作者:fishyuze -- 发布时间:2/2/2008 11:28:00 AM -- 用数论做 分解质因数 |
-- 作者:qianjigui -- 发布时间:2/16/2008 11:42:00 PM --
这个题目好熟悉啊,好象是tju上面的。谢谢提示。 |
-- 作者:fishyuze -- 发布时间:2/17/2008 10:28:00 AM --
嗯 poj也有 类似的~~ |
-- 作者:xbtianlang -- 发布时间:4/16/2008 1:12:00 PM -- 好久没写程序,只说一下大致算法: result=1; for(i=2;i<=n;i++) //0,1结果为1 { result*=i; while(result%10==0) result /=10; //去末尾0 while(result%2==1) { result *= 6; //末尾非0数为奇数则乘6 while(result%10==0) result /=10; //去末尾0 } result %=10; //保留非0个位数。 }
[此贴子已经被作者于2008-4-16 16:32:26编辑过]
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
78.125ms |