| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 31136 人关注过本帖
标题:各位老师好!求助编辑一个大整数的快速乘除法可调用程序
只看楼主 加入收藏
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
再等等,等中国量子计算机出市,可能不用费心去设计什么分段计算,届时应该有大数类型数据可用。
2021-12-24 16:28
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 331楼 xianfajushi
对,想法挺好,谢谢您关注和支持!
2021-12-25 09:20
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
18位9平方是多少?
2022-01-23 21:41
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 333楼 xianfajushi
是说18位数的9次方吧?
那是大约不超过162位的数,如:(10^18)^9=10^162,如果是18的9次方就是18^9=有12位,用时0秒198359290368.
如:111111111111111111^9=有154位,用时0秒2581174791713197158759458382697978670921557790920035506950175781746019441940253190894093043179241870194428679274110358164356051907208242669891444486819591.
999999999999999999^9=有162位,用时0秒999999999999999991000000000000000035999999999999999916000000000000000125999999999999999874000000000000000083999999999999999964000000000000000008999999999999999999.

[此贴子已经被作者于2022-1-24 06:37编辑过]

2022-01-24 06:26
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
18位9的平方是多少?能列出分治算式看看?
WIN计算器只能看到32位有效数字,再大就是科学表示法了,因此要看到大位数的有效数字,必须另行设计.

[此贴子已经被作者于2022-1-24 15:46编辑过]

2022-01-24 10:52
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
之上提问好似没什么反应
目前仅发现51个梅森素数,最大的是M82589933(即282589933-1),有24862048位。
就如所述:我想用普通电脑,用特殊算法试试,但速度太慢了,不行,不能实现。(特殊算法就是指,仅仅算一步除法,进行初步判断,比如:一般人认为对于梅森数若指数p是4x+3型的奇数,指数p若是素数,且2p+1也是素数,则该梅森数可以被2p+1整除,若是不能整除呢?那就基本可以确定是素数了,这样的情况是很稀少的。比如99368963是个素数,2*99368963=198737927也是素数,2^99368963-1是否能被198737927整除呢?如果不能被整除,那就可能是素数,几乎是确定的。第51个梅森素数没有这个数大呢,如果这个数是素数就是第52个梅森素数。)
家用普通电脑创建这样一个数组是否满足需求_int64 a[100000]{}
相信数值运算远比字符运算快得多得多多
这就是我的分治法,不同以往字符运算,与其在字符上绞尽脑汁,不如跳出字符,另寻新途。
图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2022-1-25 05:44编辑过]

2022-01-25 05:37
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 336楼 xianfajushi
18位9的平方是36位:999999999999999999^2=有36位,用时0秒999999999999999998000000000000000001.
代码如下:(只发主程序)

Private Sub Command1_Click() '快速幂程序
Dim A, B
A = Text1: B = Text2
ts = Timer
If B = 1 Then
Text3 = A
ElseIf B = 0 Then
Text3 = 1
Else
a1 = A
Do While B > 1
s = Int(Log(B) / Log(2))
s1 = 0
Do While s1 < s
A = MbC(Trim(A), Trim(A))
s1 = s1 + 1
Loop
a2 = A
B = B - 2 ^ s
A = a1
If s2 > 0 Then
a3 = MbC(Trim(a3), Trim(a2))
Else
a3 = a2
End If
s2 = s2 + 1
Loop
If B = 1 Then
js3 = MbC(Trim(a3), Trim(a1))
Else
js3 = a3
End If
s3 = Len(js3)
Text3 = "有" & s3 & "位,用时" & Timer - ts & "秒" & js3
End If
End Sub
2022-01-25 05:49
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 335楼 xianfajushi
普通电脑好像仅仅有15位的有效数字,如果可以得到32位的有效数字,那采用快速傅里叶变换的乘法程序速度还是可以提高的,或者采用分治法也可以提高,分治法中可以把16位当作一位数字,那就快很多,比把8位或5位当作一位的快不少。
2022-01-25 06:02
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
999,999,999,999,999,998,000,000,000,000,000,001
如果希冀32位有效数字当作一位运算的话,那只有继续等待了
C++里面有效数字是19位,好似VB里面没有这么大,当然是希望有效数字越大越好,如用目前条件来讨论的话那还可以继续,否则等待,若要用VB数据类型只能是讨论分治法.
图片附件: 游客没有浏览图片的权限,请 登录注册
这样有效数字能容纳2的62次方.
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2022-1-25 08:53编辑过]

2022-01-25 08:33
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 339楼 xianfajushi
有效数字是19位的话,还是不行提高不了多少,速度还是慢!只好等待,电脑硬件技术上来了,普通电脑也能有32位甚至更多的有效数字了,那就可以大大提高速度了。
2022-01-26 15:49
快速回复:各位老师好!求助编辑一个大整数的快速乘除法可调用程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020052 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved