免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: laosui
打印 上一主题 下一主题

[算法] 算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-10-20 15:56 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

原帖由 "superdoctor" 发表:


看不懂你写的哦!


我是解释这个式子的


  1. | |
复制代码

我是想写连乘的符号,呵呵

数学的东西在坛子里很难写,只能画图

论坛徽章:
0
12 [报告]
发表于 2004-10-20 16:26 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

原来论坛讨论过,上面的算法是肯定不行的
数据会溢出

论坛徽章:
0
13 [报告]
发表于 2004-10-20 17:06 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

对于大数,可能他们的本意是考察你是不是知道FFT之类的东东,研究研究吧,我也在研究

论坛徽章:
0
14 [报告]
发表于 2004-10-20 17:46 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

溢出的话,应解决的是两个大数相乘的问题。

这个问题的彻重点不一定是溢出,当然,也要考虑。。。

论坛徽章:
0
15 [报告]
发表于 2004-10-22 16:24 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

你的乘法运算在n很大的时候肯定是很麻烦的

对于n!

我们记F1(n)=n*(n-1)*(n-2)*.....*2*1
         F2(n)=n*(n-2)*(n-4)*........*(2or1)
         Pow2(n)=2^n;

对于n=2k时
    F1(n)=F2(n-1)*F1(k)*Pow2(k);                  (*)
如:

1000!=2^500*500!*F2(9999);

此时,F2(n-1)中的所有项为奇数!(含有大量的素数)

利用(*)式,可以对n!进行递归,可以很快的找到n!所有的素数因子及各个因子对应的阶

n!=2^p1*3^p2*5^p3........

然后,使用汇编来提高效率


  1. 进制:

  2. 我们知道,2进制的时候,如果对一个数乘2的n次方,则可以将这个数左移n位,同理,10进制依然。
  3. 我们可以设计一个可以处理P(P为素数)进制的程序,就可以很快地算出n!的各个P^pi项,然后就乘吧,乘吧:P
复制代码

论坛徽章:
0
16 [报告]
发表于 2004-10-22 16:44 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

P进制?呵呵,新天方夜谭。

论坛徽章:
0
17 [报告]
发表于 2004-10-22 17:42 |只看该作者

算法请教 1!*2!*3!*...*N! 当N很大时的优化算法! 谢谢!

呵呵,童话而已

论坛徽章:
0
18 [报告]
发表于 2006-03-09 13:51 |只看该作者
多谢各位热心的朋友。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP