数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 技术员

[原创]如何对阶乘求逆?

[复制链接]
发表于 2013-9-18 18:30 | 显示全部楼层

[原创]如何对阶乘求逆?

下面引用由ataorj2013/09/18 11:39am 发表的内容:
发明不好推广的话,研究小项目自己生产,积累发展才实际些吧.有好想法的很多,愿意实际做的却较少...所以投 ...
ataorj说得对,谢谢!.20年前搞过专利停了,发现有资助去年下半又搞.好多事情得一步一步地做,在想法做样品,等有样品,授权了准备去找投资商
发表于 2013-9-19 10:37 | 显示全部楼层

[原创]如何对阶乘求逆?

思路仍是上面的,办法有了. 比如一个阶乘数m=720,其二进制形式末尾有4个(记为q=4)连续"0",: 1011010000 q即4也表示成二进制形式: 100,其位数3用s表示,则n在2^s附近,暂时认为2^s=8>=n>2^(s-1)=4 先取n=8... -------- 下面用Purebasic进行,没有考虑异常,比如你输入的m不是阶乘数或输入错误. 试验参考数据: n q s m == 二进制 1 0==0 0 1==1 2 1==1 1 2==10 3 1==1 1 6==110 4 3==11 2 24==11000 5 3==11 2 120==1111000 6 4==100 3 720==1011010000 7 4==100 3 5040==1001110110000 8 7==111 3 40320==1001110110000000 9 7==111 3 362880==1011000100110000000 10 8==1000 4 3628800==1101110101111100000000 17 15==1111 4 355687428096000==1010000110111111011101110110011011000000000000000 16 15==1111 4 355687428096000/17==100110000011101110111011101011000000000000000 下面是程序,把上面m,q和s代人下面开始处后,运行.[注意]m.q中".q"是数据类型,别搞混了. 程序基本是我前面的,有变通,解释比较麻烦,略去.看我后面结果,无论大小数,除法都不超过4次. m.q=355687428096000:q=15:s=4 Procedure.q i(v):v1.q=1 For k=2 To v v1=v1*k Next ProcedureReturn v1 EndProcedure n=Pow(2,s):n+2:BB:b=0:w=n:j=0:nn=0 AA:If w>1:w/2:b+w:j+1:Goto AA:EndIf If b>q:If nn=2:n-1:Goto CC:Else:nn=1:n-2:Goto BB:EndIf ElseIf bm:n-1:ElseIf ii-=-=-=-=- 以下内容由 ataorj 时添加 -=-=-=-=- "思路基本是我前面的",错成"程序基本是我前面的"
发表于 2013-9-19 18:45 | 显示全部楼层

[原创]如何对阶乘求逆?

如果已知的阶乘结果数字非常大,无论什么方法,恐怕实际运作时都要编程解决。
既然可以编程,那就不是什么问题了。下面这程序,一瞬间即能给出答案:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2013-9-19 19:30 | 显示全部楼层

[原创]如何对阶乘求逆?

下面引用由天山草2013/09/19 06:45pm 发表的内容: 如果已知的阶乘结果数字非常大,无论什么方法,恐怕实际运作时都要编程解决。
既然可以编程,那就不是什么问题了。下面这程序,一瞬间即能给出答案:
10000内的阶乘可以,过了就不行了。
发表于 2013-9-19 19:41 | 显示全部楼层

[原创]如何对阶乘求逆?

穷举法当然就没意思了. 思路解释: 比如一个阶乘数m=720,其二进制形式末尾有4个(记为q=4)连续"0",: 1011010000 q即4也表示成二进制形式: 100,其位数3用s表示,则n肯定在2^s=8附近[原因见前面[x/2]+[x/4]+[x/8]+...+[x/(2^t)]=m,先假设x=(2^t)],暂时取n=8,一般地,sq则,n-2,否则
发表于 2013-9-20 17:59 | 显示全部楼层

[原创]如何对阶乘求逆?

[x/2]+[x/4]+[x/8]+...+[x/(2^t)]中[]其实就是把x表示成2进制形式的运算,只是这里用于统计2因子个数了.
发表于 2013-9-20 18:05 | 显示全部楼层

[原创]如何对阶乘求逆?

前面程序中最应优化的是:如果第二次统计2因子数,则不必从头开始,仅仅针对(n+1)(n+2)或(n-1)(n-2),然后再累计或累减于上次结果中即可.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2026-1-12 11:31 , Processed in 0.093543 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表