标题:各位老师好!求助编辑一个大整数的快速乘除法可调用程序
取消只看楼主
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
这个也是写着是分治法乘法,不知道是不是,不知道怎么用?咋弄?
Function Mult_() '分治法   多位数相乘  C*A=C,A 2013-06.14
Dim myVar, myNum, Var, r As Variant
Dim Aa, Ba, Ca, xP2 As Single
Dim Dx As Chen
Dim ax_sz(512), bx_sz(512), cx_sz(512) As Variant
        
Ax.St = Ax.St + Zero
Cx.St = Cx.St + Zero

If Left(Ax.St, 1) > "0" And Left(Cx.St, 1) > "0" Then
    For i = 0 To xP
        ax_sz(i) = CDec(Mid(Ax.St, i * Gsw + 1, Gsw))
        bx_sz(i) = CDec(Mid(Cx.St, i * Gsw + 1, Gsw))
    Next i

    myVar = ax_sz(0) * bx_sz(0)
    cx_sz(1) = myVar
    For i = 1 To xP
       myNum = ax_sz(i) * bx_sz(i)
       myVar = myVar + myNum
       For j = 0 To (i - 1) / 2
        cx_sz(i + 1) = cx_sz(i + 1) + (ax_sz(i - j) - ax_sz(j)) * (bx_sz(j) - bx_sz(i - j))
       Next
       cx_sz(i + 1) = cx_sz(i + 1) + myVar
    Next
   
   r = CDec(0)
For i = xP To 0 Step -1
    cx_sz(i) = cx_sz(i) + r
    r = Fix(cx_sz(i) / Zero6)
    cx_sz(i) = cx_sz(i) - r * Zero6
Next i

oResult = CStr(cx_sz(0))
For i = 1 To xP
    oResult = oResult + Right(Zero06 + CStr(cx_sz(i)), Gsw)
Next i

Dx.Bz = IIf(Ax.Bz = Cx.Bz, "", "-")
Dx.St = oResult

'指数计算
Aa = Val(Left(Ax.St, 1))
Ba = Val(Left(Cx.St, 1))
Ca = Val(Left(Dx.St, 1))

If Ax.Zs + Cx.Zs < 10 ^ 15 Then
    Dx.Zs = Ax.Zs + Cx.Zs + IIf(Aa * Ba <= Ca, 0, 1)
Else
    Dx.Zs = 0
End If

Cx = Dx
Ax = Dx

Else
   Ax.Bz = ""
   Ax.St = "0"
   Ax.Zs = 0
   Cx = Ax
End If
End Function
2020-02-12 16:50
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
嗯,谢谢!您这个是1.6*10^10内的吧?这个是vba程序?我能用吗?谢谢!我试试吧!
太好了,谢谢,非常感谢!祝您新年快乐万事如意,身体健康阖家幸福安康!
2020-02-12 20:23
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
是1.6*10^9吧?看你程序中的数字的位数是10位的
2020-02-12 20:28
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
我的程序到现在还没有算到这么大呢。
2020-02-12 20:29
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
谢谢!我复制到电脑,运行了一下程序,结果一样,时间比你长,可能是我开的程序多?我是一边看电视(电脑上),一边还运行了其它两个程序。
2020-02-12 21:55
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
我的运行时间是1149秒多一点,我的另两个程序还没有出来结果呢。不太懂你的这个程序,能不能修改一下,仅算出10^9内的孪生素数呢?如何改呢?我不知道10^9内有多少,需要这个数据。谢谢!有空再弄吧!
2020-02-12 22:01
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
您的程序确实速度快,比我的快多了,不知道原理,我直接把6改为0,就是把1.6*10^9改为了10^9,等会儿看看结果吧!确实是比我的程序快,学习了,弄明白了再调整一下我的程序。谢谢!
2020-02-12 22:18
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
就是快,出来结果了,用时291秒,非常感谢!10^内有孪生素数对:3424507.


[此贴子已经被作者于2020-2-12 22:28编辑过]

2020-02-12 22:23
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
嗯嗯好,埃拉托斯尼筛法?高手!我的朋友要这些数据的,我不关心这个数据,关心程序的速度!希望您能指导!提高速度,搞出大整数的快速乘法除法程序,重点是除法程序。我的程序太慢了,还没有算到1600000000.
谢谢!晚安!祝新春愉快万事如意!
2020-02-13 01:21
ysr2857
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:767
专家分:65
注 册:2020-2-10
得分:0 
额,是欧拉筛法?我改了一下程序,改成计算到10^10,还没有出来结果,也没有提示溢出,不知道是否能出结果?多长时间?
2020-02-13 11:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499181-1-1.html




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

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