| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 29618 人关注过本帖
标题:各位老师好!求助编辑一个大整数的快速乘除法可调用程序
取消只看楼主 加入收藏
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
回复 88楼 wmf2014
谢谢你!原理是成立的,我已经推导证明过了,你说的道理是对的。命题是可以逆推的,结论和前提是充要条件。所以是确定性的,比AKS法方便容易实现,比拉宾-米勒法靠谱,拉宾-米勒法在小数据中由于人们已经找到了漏掉的合数,所以可以排除确定,更大范围就不是确定的。这个法是确定的,限于速度,我也不知道能算到多少位的。
程序速度提高了就是有价值的,谢谢你,非常感谢!明天我试试!
前面提到的那个大整数的除法的算法我已经搞出程序,不快,前面的迭代增长太快,是2的幂数增长的,最后一步弄不准了,只好一个一个加上,所以最后这一步就特别慢,偶尔会有一个刚好不用加的就快,不好用。不是好法,不是普遍的所有整数的速度都能提高的。不发了。仅供参考。
2020-02-22 00:19
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
回复 88楼 wmf2014
这个文件打不开,我的电脑没有打开此文件的程序需要下载其他程序,也不知道啥样的程序。
谢谢您!
下面发个除法程序,只发主程序,也是个可调用程序。太慢,不断调用乘法比较大小,加法减法,若把乘法等程序速度提高了,程序是不是能用也不知道,发一下仅供参考。
 Public Function MCC1(D1 As String, D2 As String) As String ';大整数的除法
Dim ss
 ss = MBJC(D1, D2)
If ss = -1 Then
 MCC1 = "0" & "/" & D1
  Else
  If ss = 0 Then
   MCC1 = 1
   Else
   If Len(D2) < 9 Then
   MCC1 = MCC(Trim(D1), Trim(D2))
   Else
   x = Len(D1) - Len(D2)
   d4 = D1
  If x <= 3 Then
  x = 3
  B = 0
  Else
  a = Log(2) / Log(10)
  X1 = x
 B = Int(X1 * Val(a))
Do While B >= x
X1 = X1 + 1
B = Int(X1 * Val(a))
Loop
B = X1 - 1
End If
  c = 1
   Do Until i = B
    i = i + 1
    c = MbC(Trim(c), 2)
   Loop
   i1 = B
  Do While MBJC(Trim(D1), MbC(Trim(D2), Trim(c))) = 1
 i1 = i1 + 1
c = MbC(Trim(c), 2)
Loop
c = 1
Do Until i2 = i1 - 1
c = MbC(Trim(c), 2)
i2 = i2 + 1
Loop
D1 = MPC(Trim(D1), MbC(Trim(D2), Trim(c)))
D3 = c
C1 = c

D1 = MPC(Trim(d4), MbC(Trim(D3), Trim(D2)))
d5 = D1
If x >= 15 Then
x = x + 2
Else
x = x
End If
Do Until i2 <= x
c = 1
i1 = 0
  Do While MBJC(Trim(D1), MbC(Trim(D2), Trim(c))) = 1
 i1 = i1 + 1
c = MbC(Trim(c), 2)
Loop

i2 = 0
c = 1
Do Until i2 = i1 - 1
c = MbC(Trim(c), 2)
i2 = i2 + 1
Loop
D1 = MPC(Trim(D1), MbC(Trim(D2), Trim(c)))
D3 = MPC1(Trim(D3), Trim(c))
C1 = c
Print i2, D3
Loop
Do While MBJC(Trim(d4), MbC(Trim(D3), Trim(D2))) > 0
D3 = MPC1(Trim(D3), 1)
Loop
If MBJC(Trim(d4), MbC(Trim(D3), Trim(D2))) < 0 Then
D3 = MPC(Trim(D3), 1)
Else
D3 = D3
End If
JW = MPC(Trim(d4), MbC(Trim(D3), Trim(D2)))

If MBJC(Trim(JW), 0) = 0 Then
MCC1 = D3
Else

MCC1 = D3 & "/" & JW
End If
 End If
End If
End If
End Function
2020-02-22 08:03
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
回复 88楼 wmf2014
这回好!复制下来了,谢谢您!学习学习,非常感谢!
2020-02-22 09:20
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
试验了一下程序,用时16秒,快了不少,继续研究学习,谢谢老师!!
2020-02-22 09:38
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
回复 93楼 wmf2014
非常好,谢谢!我试验一下!学习了,向你学习!
2020-02-22 10:54
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
您的程序比我的快,我的程序不是仅算素数的是1亿的拆分素数对,两个素数的和等于1亿,程序计算了大槪3小时以上(没有计算时间的程序,现在刚学会计算时间的程序),结果如下:(太长,仅发一部分)
100000000的方根为10000,方根内有119个总数有291400个:100000000=11+ 99999989
29+ 99999971
41+ 99999959
59+ 99999941
173+ 99999827
179+ 99999821
227+ 99999773
383+ 99999617
389+ 99999611
449+ 99999551
461+ 99999539
491+ 99999509
563+ 99999437
599+ 99999401
647+ 99999353
677+ 99999323
743+ 99999257
887+ 99999113
911+ 99999089
1091+ 99998909
1109+ 99998891
1181+ 99998819
1217+ 99998783
1487+ 99998513
1553+ 99998447
1559+ 99998441
1571+ 99998429
1583+ 99998417
1637+ 99998363
1709+ 99998291
1889+ 99998111
1901+ 99998099
1949+ 99998051
1979+ 99998021
2027+ 99997973
2087+ 99997913
2099+ 99997901
2020-02-23 09:17
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
回复 98楼 xianfajushi
就是这样算的,并不是减出来结果都是素数,还要判断,所以程序运行慢!谢谢关注!我不需要这么大的数据,我需要的是快速程序!一亿内的素数,数值不大数量多,经过比较前面的程序速度没有变化几乎一样,判定一个23位的素数单个素数,二者差1秒,明显的差距,再小的就没有差距了,用前面的程序算1亿内的数据差别很小,没有进步,不明显。
我算10090000000~10090001000之间有5对孪生素数,用我的程序运行时间179秒,用网友前面的改进程序运行时间是167秒,进步不明显,所以我还是要弄出快速乘法除法程序,有毫秒级的程序吗?算一步大整数的乘法除法在毫秒内的?
希望老师帮忙!其中一个用途就是前面的大整数的素性测试。
2020-02-23 10:09
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
回复 100楼 xianfajushi
谢谢关注和指导!对,孪生素数对就是差为2的素数对:
10090000000与10090001000之间有5对孪生素数对:
10090000241和 10090000243  孪中10090000242
10090000469和 10090000471  孪中10090000470
10090000517和 10090000519  孪中10090000518
10090000637和 10090000639  孪中10090000638
10090000727和 10090000729  孪中10090000728
用时167秒。
2020-02-23 11:31
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
10090000000与10090001000之间有5对孪生素数对:
10090000241和 10090000243  孪中10090000242
10090000469和 10090000471  孪中10090000470
10090000517和 10090000519  孪中10090000518
10090000637和 10090000639  孪中10090000638
10090000727和 10090000729  孪中10090000728
用时196.904999999999秒
2020-02-23 11:39
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:801
专家分:70
注 册:2020-2-10
收藏
得分:0 
不是一种数据,不是一个问题,我不要这样数据,我要的是快速程序,一个是自己用这样程序,一个是送给朋友用于计算人家需要的数据。我的计算是为了验证程序的速度。
2020-02-23 12:10
快速回复:各位老师好!求助编辑一个大整数的快速乘除法可调用程序
数据加载中...
 
   



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

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