数学中国

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

[原创]大整数的乘法

[复制链接]
 楼主| 发表于 2021-4-12 20:28 | 显示全部楼层
本帖最后由 ysr 于 2021-4-17 12:00 编辑

已经做成了可调用程序:

Public Function MbC(D1 As String, D2 As String) As String
Dim j1&, j2&, e&, d&, e1&,m,n

   ' 按列法计算C=A*B
m = Trim(D1): n = Trim(D2)
x = Len(m) \ 4: Y = Len(n) \ 4
m = String(4 * x + 4 - Len(m), "0") & m
n = String(4 * Y + 4 - Len(n), "0") & n
x = x + 1: Y = Y + 1
Dim A(), B()
ReDim A(1 To x): ReDim B(1 To Y)
For i1 = 1 To x
A(i1) = Val(Mid(m, i1 * 4 - 3, 4))
Next
For i2 = 1 To Y
B(i2) = Val(Mid(n, i2 * 4 - 3, 4))
Next
ma = x: mb = Y
    MC = ma + mb
    ReDim c(MC)
    e1 = 0
    j1 = ma: j2 = ma
    For I = MC To 2 Step -1
        If I <= ma Then j2 = I - 1
        e = e1: e1 = 0
        For J = j1 To j2
            e = e + A(J) * B(I - J)
            If e > 2040000000 Then '减少进位次数
                e = e - 2040000000
                e1 = e1 + 204000
            End If
        Next J

        If j1 > 1 Then j1 = j1 - 1
base = 10000
        d = e \ base
        c(I) = e - d * base
        If Len(c(I)) < 4 Then
        c(I) = String(4 - Len(c(I)), "0") & c(I)
        Else
        c(I) = c(I)
        End If
jc = c(I) & jc
        e1 = e1 + d
    Next I
    jc = d & jc
   MbC = qqdl(Trim(jc))
End Function

Private Function qqdl(sa As String) As String

  
  For I = 1 To Len(sa)
    If Not Mid(sa, I, 1) = "0" Then
        Exit For
    End If
Next
strTmp = Mid(sa, I)
  If Len(strTmp) = 0 Then
  qqdl = "0"
  Else
qqdl = strTmp
End If
End Function
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-13 00:44 | 显示全部楼层
2678145490787694710138406683675886762424440548647327525594133873038347266950777818028529804877891353347244255046176220880989519574806598935727647635506939520211209794328712328126947740602255036264392628020291100698432900022333877728824270241063030019536831205264726059774673235680796770108334187808344470141093691232926021244583649747591446066921535333854157441330339217364515328375889937313870826987520723914810358707312468857074455945610038118763873992681688857200178452843740327143990247797893489008808544535536081089994800692174759199578596435124153437689121057209523619989593900355037400039597165241729693472001589594642879166693443994939359639600558001937547209387175085119128575833396037478944824322315197771750730768383267287661855880237549141571520374996029107650341071074081501632143441365461865431362023790463469688071768208320226561675630348708531708110373889241713511809029065048200924851629507265095151843687852114948736130517024578482059771284515915597919026074110811882700307150650858080695566672584075215926450360584738705106755945308199980660478183563586945902705730231409948938478910176292179410952310592864745025373902249844607078729230098512959498522851990040833671698873183076996740726479481352429756295966452788332789259316653805673821716832204368483794501474641036177256005810416507649770210480747056764697918800240201155395628561684853684747063434500664449114760179367086926249813006056735202795763742271472136500817313178050955623517148960973128433455798444839070215800699075256371341531892841721456473301085595261371522078416420399702683504171019191363372883472415693921509069484448792009627325245658854979159002549542769741504596589556474585723101403486046952706847309188488390899096649210853675228464611999630360164703837131620319658277117300208326944026347808645954842782309633205645471959842390075986572806483755223497552549948718545978420793425036666212191832327909389117021539426917904222971515424022606157676379417252939026404363841301595348953340657745965591468370831371449860774296757556463049237248472613472436666799615694672489600751763956185893123579218797539971253828850163437053164723845196089466298000486042246621634263064752906475198879616484926366053597071510886820878425907736453843197228282179943365206039514850477377542684361730162273246709577442085159313947668552462343596819299335060863266863059421286080919061657175757802930378698062290163092494909661982639303946271889619023417245433500782685534406291391527022657608608130680134939380126048353657648559735671562230714451258764762350451448379438849319710473631625533527602085050858633346936315115309333355986556546113134787213610042970405680162084678021281774169131725296977361816657904233850711837826724976507876061043779177845550646612327663283839673950405472039432309339110648301347672597370034346896334064135099613033528785924976781865447506814375627647103020761819104412269362847848884053177378762432543285984193091289854949394023586451139393716370633759317698908834326333339634557238526607966375935960004339535161203546369910853171524516945554862019134684985868547068709986010719120259421723270478586992153989283736650948010894951434857207445141886625290777550599700738909777829412358941157674866550887608199469723859806486384262574182811908513849905040209776132986875560077482527819093584150609347560543627976011009349905362597935257895287412087233810106693141683912683308201407373637490835862452911394718399632093441745957478079754723679119343225931665785380948807114301164623717144211285944154289093317610519159281033583963015810556464180819928345256832572962092994993950655913067768151113345566231088759030148164710287289335782462899525700500822021472132532771242198844498579102733028256523810973405350508253183399668290339844052874956694050028526577775764032598023622192221226501334606994447870277619118208162133562541678250491647671042612088902952091163094215645902682086024337098910110924115381788866213335441814530141911754446270296630426675020592640816713810936850961517475097707179713115856513919631998747192606018612535436009162735908155778165736923393260822217415131632296810207091918499370220533980666393617256227781299273913099896641458499949922475383775878771011361417556799406151773618626138749998464514570482965286184387350245762317271666329142667987131139265167425606863654107927682419958167046956962340419295394058625063862272314570914511355913547470055072878835349142049813368019960713974852351833144227544851625677753419141348585495260230041111323576432417502998832485027071744397105338790364666312325483218209150368759120749671419554589928540715813531144241705501211397506662448276056294585639532800634727428900861538486753011006379264618338782036690340859441153926551954112364946638768223012718907190897165613382555036872673785444132692292217184974818914501886689736449912131900762592363447945036085692999163815947845753538999001633767986447907729462453017601用时2.612305E-02秒,有4888位(稍作改进并加了去掉前导0的程序,速度有所提高)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-13 21:30 | 显示全部楼层
'这是利用快速傅里叶变换的乘法程序代码,还没有前面的模仿手工计算的程序快呢,不知道该咋调整和优化了:

Private Sub Command1_Click()
Dim m, n
m = Trim(Text1): n = Trim(Text2)
ts = Timer
c = MbC4(Trim(m), Trim(n))
Text3 = c & "用时" & Timer - ts & "秒,有" & Len(c) & "位"
End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""

End Sub

Public Function MbC4(D1 As String, D2 As String) As String '快速乘法
        Dim l As Long, le As Long, le1 As Long, n As Long, r As Long, p As Long, q As Long, m As Byte
  Dim wr As Double, w1 As Double, wlr As Double, wl1 As Double, tr As Double, t1 As Double
  Dim pi As Double, t As Double, tr1 As Double
        
  
Dim xr() As Double, a As String
  a = Trim(D1)
  B = Trim(D2)
  
  X = Len(a) \ 4: Y = Len(B) \ 4
  a = String(Val(X * 4 + 4 - Len(a)), "0") & a
  B = String(Val(Y * 4 + 4 - Len(B)), "0") & B
  X = X + 1: Y = Y + 1
  sb1 = X + Y
  sb2 = Log(sb1) / Log(2)
  If InStr(sb2, ".") = 0 Then
  sb2 = sb2
  Else
  sb2 = Int(sb2) + 1
  End If
  sb = 2 ^ sb2
  a = String(Val(sb) * 4 - Len(a), "0") & a
  B = String(Val(sb) * 4 - Len(B), "0") & B
  
   ReDim x_(1 To sb): ReDim y_(1 To sb)
    For i1 = 1 To sb
    x_(i1) = Mid(a, (sb - i1 + 1) * 4 - 3, 4): y_(i1) = Mid(B, (sb - i1 + 1) * 4 - 3, 4)
    If Len(x_(i1)) < 4 Then
    x_(i1) = String(4 - Len(x_(i1)), "0") & x_(i1)
    ElseIf Len(y_(i1)) < 4 Then
    y_(i1) = String(4 - Len(y_(i1)), "0") & y_(i1)
    Else
    x_(i1) = x_(i1): y_(i1) = y_(i1)
    End If
   
      Next
      ReDim xr(0 To (Len(a) - 4) \ 4): ReDim yr(0 To (Len(B) - 4) \ 4): ReDim zr(0 To (Len(B) - 4) \ 4)
      
       If Len(a) = 4 Then
  xr(0) = a: yr(0) = B
  Else
    Dim I As Long, J As Long, mn As Long, lh As Long, k As Long
    '位序倒置
n = sb '求数组大小,其值必须是2的幂
lh = n / 2
    J = n / 2
    For I = 1 To n - 2


    Debug.Print I, J
    k = lh '下面是向右进位算法
Do
    If k > J Then Exit Do '高位是1吗
J = J - k '是的,高位置0
    k = k / 2 '准备次高位的权
Loop Until k = 0 '次高位的权若非0,则检查新的次高位
J = J + k '非则若最高位是0,则置1
   xr(I + 1) = x_(J + 1): yr(I + 1) = y_(J + 1)
    Next
    xr(0) = x_(1): xr(1) = x_(1 + sb / 2)
    yr(0) = y_(1): yr(1) = y_(1 + sb / 2)
  
     End If
  
  Dim xi(): Dim yi(): Dim zi()
  n = sb '求数组大小,其值必须是2的幂
m = 0
  l = 2
  pi = 3.14159265358979
  Do
  l = l + l
  m = m + 1
  Loop Until l > n
  n = l / 2
  ReDim xi(n - 1): ReDim yi(n - 1): ReDim zi(n - 1)

  l = 1
  Do
    le = 2 ^ l
    le1 = le / 2
    wr = 1
    wi = 0
    If l = 1 Then
    t = 0
    Else
    t = pi / le1
    End If
    w1r = Cos(t)
    w1i = -Sin(t)
    r = 0
  Do
    p = r
    Do
     q = p + le1
     
     tr = xr(q) * wr - xi(q) * wi
     ti = xr(q) * wi + xi(q) * wr
     tr1 = yr(q) * wr - yi(q) * wi
     ti1 = yr(q) * wi + yi(q) * wr
     
     
     xr(q) = xr(p) - tr
     xi(q) = xi(p) - ti
     xr(p) = xr(p) + tr
     xi(p) = xi(p) + ti
     
       yr(q) = yr(p) - tr1
      yi(q) = yi(p) - ti1
      yr(p) = yr(p) + tr1
      yi(p) = yi(p) + ti1
     xr(p) = Format(Val(xr(p)), "0.000000"): xi(p) = Format(Val(xi(p)), "0.000000")
     yr(p) = Format(Val(yr(p)), "0.000000"): yi(p) = Format(Val(yi(p)), "0.000000")
     
      p = p + le
  Loop Until p > n - 1


  wr2 = wr * w1r - wi * w1i
  wi2 = wr * w1i + wi * w1r
  wr = wr2
  wi = wi2
  r = r + 1
  Loop Until r > le1 - 1
  l = l + 1
  Loop Until l > m

  For I = 0 To n - 1 '仅输出模
   zr(I) = xr(I) * yr(I) - xi(I) * yi(I): zi(I) = xr(I) * yi(I) + xi(I) * yr(I)
    zr(I) = Format(Val(zr(I)), "0.000000"): zi(I) = Format(Val(zi(I)), "0.000000")
  

      's = s & "/" & zr(I)
      's1 = s1 & "/" & zi(I)
      Next
      
       J = sb
     
       ReDim x_(1 To sb): ReDim y_(1 To sb)
     For k = 1 To J
         n1 = n1 + 1
          ReDim Preserve x_(1 To n1)
        
         x_(n1) = zr(n1 - 1): y_(n1) = zi(n1 - 1)
         x_(n1) = Format(Val(x_(n1)), "0.000000"): y_(n1) = Format(Val(y_(n1)), "0.000000")
         
       Next
   
    '位序倒置
n = sb '求数组大小,其值必须是2的幂
lh = n / 2
    J = n / 2
   
    For I = 1 To n - 2


    Debug.Print I, J
    k = lh '下面是向右进位算法
Do
    If k > J Then Exit Do '高位是1吗
J = J - k '是的,高位置0
    k = k / 2 '准备次高位的权
Loop Until k = 0 '次高位的权若非0,则检查新的次高位
J = J + k '非则若最高位是0,则置1

xr(I + 1) = x_(J + 1): yr(I + 1) = y_(J + 1)
    'js = js & "/" & x_(J + 1)
    'js1 = js1 & "/" & y_(J + 1)
    Next
    'sx1 = "/" & x_(1) & "/" & x_(1 + sb / 2) & js
    'sy1 = "/" & y_(1) & "/" & y_(1 + sb / 2) & js1
   xr(0) = x_(1): xr(1) = x_(1 + sb / 2)
   yr(0) = y_(1): yr(1) = y_(1 + sb / 2)
   
   
   ns = Len(a) \ 4: Jn = ns
  
      
  

  ReDim zr(0 To ns - 1)

  m = 0
  l = 2
  pi = 3.14159265358979
  Do
  l = l + l
  m = m + 1
  Loop Until l > ns
  ns = l / 2
  ReDim xi(ns - 1): ReDim yi(ns - 1): ReDim zi(ns - 1)

  l = 1
  Do
    le = 2 ^ l
    le1 = le / 2
    wr = 1
    wi = 0
    If l = 1 Then
    t = 0
    Else
    t = -1 * pi / le1
    End If
    w1r = Cos(t)
    w1i = -Sin(t)
    r = 0
  Do
    p = r
    Do
     q = p + le1
     
     tr = xr(q) * wr - xi(q) * wi
     ti = xr(q) * wi + xi(q) * wr
     tr1 = yr(q) * wr - yi(q) * wi
     ti1 = yr(q) * wi + yi(q) * wr
     
     
     xr(q) = xr(p) - tr
     xi(q) = xi(p) - ti
     xr(p) = xr(p) + tr
     xi(p) = xi(p) + ti
     
       yr(q) = yr(p) - tr1
      yi(q) = yi(p) - ti1
      yr(p) = yr(p) + tr1
      yi(p) = yi(p) + ti1
     xr(p) = Format(Val(xr(p)), "0.000000"): xi(p) = Format(Val(xi(p)), "0.000000")
     yr(p) = Format(Val(yr(p)), "0.000000"): yi(p) = Format(Val(yi(p)), "0.000000")
      p = p + le
  Loop Until p > ns - 1


  wr2 = wr * w1r - wi * w1i
  wi2 = wr * w1i + wi * w1r
  wr = wr2
  wi = wi2
  r = r + 1
  Loop Until r > le1 - 1
  l = l + 1
  Loop Until l > m

  For I = 0 To ns - 1 '仅输出模
zr(I) = (xr(I) - yi(I)) / n
      zr(I) = Format(Val(zr(I) + 0.5), "0.000000")
     If InStr(zr(I), ".") = 0 Then
     s121 = zr(I)
     Else
     s121 = Left(zr(I), InStr(zr(I), ".") - 1)
      End If
      's0 = "/" & s121 & s0
      zr(I) = s121
      Next
      For i1 = 1 To Val(Jn - sb1 + 1)
      zr(sb1 + i1 - 2) = 0
      Next
      
     
     
      For i1 = 0 To n - 1
      If zr(i1) < 0 Then
      zr(i1) = "0000"
      ElseIf Len(zr(i1)) < 4 Then
      zr(i1) = String(4 - Len(zr(i1)), "0") & zr(i1)
      Else
      zr(i1) = zr(i1)
      End If
      
      's5 = s5 & "/" & zr(i1)
      
      If i1 = 0 Then
      
      s6 = Val(Left(zr(i1), Len(zr(i1)) - 4))
      If Len(s6) < 4 Then
      s6 = String(4 - Len(s6), "0") & s6
      Else
      s6 = s6
      End If
      s8 = Right(zr(i1), 4)
      ElseIf Val(zr(i1)) >= 0 Then
      s7 = Val(zr(i1)) + Val(s6)
    If Len(s7) = 4 Or Len(s7) = 8 Or Len(s7) = 12 Then
          s7 = s7
          Else
          s7 = String(12 - Len(s7), "0") & s7
         End If
      s10 = Right(s7, 4)
      s11 = s10 & s11
      If Len(s7) < 4 Then
      s7 = String(4 - Len(s7), "0") & s7
      ElseIf Len(s7) = 4 Then
      s6 = "0000"
      Else
      s7 = s7
      s6 = Val(Left(s7, Len(s7) - 4))
      End If
      Else
      s6 = s6
      End If
     
      Next
      s9 = s6 & s11 & s8
     
   
   s9 = qdqd0(Trim(s9))
   
     's2 = nifft(dxcx1(Trim(s)), dxcx1(Trim(s1)), Trim(sb1))
     
     's3 = nifft(Trim(sx1), Trim(sy1), Trim(sb1))
      MbC4 = s9
  End Function

  Private Function qdqd0(sa As String) As String
  a = sa
  Do While Left(a, 1) = "0"
  a = Mid(a, 2)
  Loop
  If a = "" Then
  a = 0
  Else
  a = a
  End If
  qdqd0 = a
  End Function


回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 16:39 | 显示全部楼层
2^100000=有30103位,用时3.617188秒99900209301438450794403276433003359098042913905418169177152927386314583246425734832748733133244965040316439444555585493001879966076561765629084713542474928751988896298736710932463504273731124792658002785312410887370856052872283901645686910268506759235179146970528576446968015248323454755432502927865208069577709717411022320429763512053307779968979251166198707717857759555217200813202952046179492292592956239209657978735581586675254957973131448062492602618379413050805826860315351341787396228349908863577580621046066363721305877953223449720108084863695414018358513598580356035740218729081555665806071864612689728397946218422675793496388933572475887619591376567624111250207087048704651793963987101092003639347456180906016133778985602968635985580247614489330470522228601313770959583573194858984964045723838751707022423326334368944232973818777331532869442179361253019078689036036632831615027261399341528040711719149239033418749353944558963012921972564177172335435447515523793108922681824024527557520947046421859438628656327442313320847422215514933150027177500642288262118225493496005574573349646784832691809518959557691745096732244177404328404558821091379053756467721399766217852650571698548345624875183223832503186455054721143699341679816781702551228129780651948062954053391546574799412974991903485075443364145056316573960066933824273164340395801212802609842122475142078347122248314103040686037196401618557416564394722534649452497003145098900931622689527444287054764254722531675145211822314553883743082326422006330251375331293651643417252062561553117947386191429047614456549271284181751835313270529754953705614382395732279396730301060774568484774278321953492279838364361637647429695459066723691241363259321233356431358944652191018821238297409079163860232354509593887667364032295779939011521544480036372150691155911119960015305891077294210322304242620356934932160529275696258584458223545946452769231081973058062803265167364493437617324097533423332897302829591735692730132864233117596052304951716770331637095222569524604021433876551976440165281480223483318810975594219604764793885201985410173489859485110054692466172341431353099384059232689535865388869744270086070286355020855620295493524800507965215649196832651067441009678229519541616177175429975200098873073778762106858907709694116104380286239504453237895918707602892603934898261007748876728529181064684891438936490647845912116121933007079005370590421880128565594036990708880329668716116559612323319983109232250828661803218804394475729867620969358197843859279692501233269351946932077243355273655662482237878338880749992768316334403186044636187037897843130328438234704109443065914719283411909751852392123276743849905615636884329390394420026175309768506051329371014490863961416205560535473355699267009413752718291424072342679375650697655674759341013102253428300804090795873295442135513073020501715984242307604692097329072901416063539608805592023573768856478522400927771114891344924169956071717862984365339781808694741067511113535237115404365993108896974856588008878619749343579292462040517672460122506184040119662898726738030704983612179744846791007478463561946648292247361341151355671792917819680560537264841411283478582412591219546011844124093497829633170420025304186616949623187358606524854102222118695442237882891897120805145751413619648053697231645705649984795376571745481285974060773391587753323552156094359192751993510142222469630170137174193375049192953632951011152929518362828191918216516764559465158280489842561167481503678052678786627169996492969493770457948761466281109299820207370133303244510053853785511888034741481986651145793226849009930002367361685552941734420599253719652449979254831593437063439703718096114703230741869850350547222890271748503333683283002811329108416931504573899331839345932929949427960153097561187089189295284490742432847670062431711716227317666067961019678022045645890158995247047410011581109636337313293883568689494087593341769093878063985846473005889281759988444774861300631530687600700848372675277897773568300427789027721056838330214702797285953363321105640642639097245799496861629080196041417539357688765879924285499121517379242703432486484142474568388895418932414509875057594030132496975416969553302968802193048741635010979200362102387682751763699809776149796360967043481401241306835768799049974365962964957054595247353820003637703248949821033313329135623151698544104153170541939282347233988484535521732036880883121009439414349382822035496502815307510870986046812248029738256312449893319652962023726085865090503079933086520012316719151827657420956895131361840954121214737863110428977178614481583169658487669495548262525049612270447147122296202746823629098038774693769873589421254417923552983874798304502539097887334697326030975441564748054737327327672486527590349953363541269539004588549886835749278646152520408004901147858922890854433539969947808674716135197858385714564215831711930041179894407902683463575503398880867251278835772976264992138274365739929273022387925769242327854872012972553860719683037824830637258998084846385038283562584039173118726943814645536516900625300232175913430847552159014752991492152969443623669108332336937679931382092758700242462383312182367152367720984171877038601723085224480431763336027597331612012622483230853292889861545592214273785074109788222447295126635722255671697794097673415430172892683326350774512101678691213344656807397973727114619192999381181788275414217929268837902854309099424412605119458492379099663295502638657011148841422661629698100736527109285045794708615080940545777978643015048999586341647005282205627860088640257094324442540440342431402038120748575379990160664655209869807905893473202430506359073638215212806000418275293254852479279042357275985742095546323638309324282507115188017756337398115237619946862632705506350998512543338755946015409008620142936256737383316930823288543270014874766351188308851737752688195263601653459005561607677134536176554509744249790760639060933000284169648475940270466694684865936364254286252416448366521739225865284742449523633023053114134493323398223365516114314691319001704882268365259163997239126266161402057079967273835295974791254889614192872612597575617015926458235411519221772539196510343447936803690570038130565578663110114763131895715563365187277579919088628907654949520194749221488514170792523523942938017011494852390058443583297487692799415863846408772659017491049332388534654299792539005613115622882411471921581372101202673996486228316104302872687398403351421202995166108461931646880759445269652485700705544521525474934504348529179875121859736471904615154135825821390401721182957023275370273897877935069040449385535876505035571558728732015968850613311454771015756993754410974933741159911991149627268017180389509078030411844000755854685609769656695843256272833274164180445907278446800513607741542884127124563533836254690689364309020682167504598193217445133629138539831545606104596926045087877003041845791534782917257628106327221080358260609045724606192042375803631472001587490753616337852434622987699178878086714539288465724172235048877668038694534745888319075973552928007092414713706966470295307005070830914124927714047761934590073152062336342261281370745041625204734495974156788820038454467743889503791923445941712455102317389950303484219370880833297091081765610107086931580206950600964283520466473333611634766641063112470651738025105994092669089840466632986136488548712306599035657723276676960571870572768143949325593713680293759746041160756415999194022667942306814857233613635929036768414803583280931275068011115716150627615566071582366122685442683302747258492948758520897908509628352355279784914755637443184839934746333003309724970128084159009694551903758499457503794650191660098615027946061307947268985078496103038848460354233921754495058761571303447004158230802257866933005121268318460095102035431743237832921768659760762754124218928081388728801758131092960201507463319795614881463334126748962568837843511784775926605772127342693283823847117460837822099396466123083439521695765810654237719818995738404303159309732150599013712183997625850554354595163400551490805656273304753625289269450202261631309024207950062589313678130052221407429647561940537821824528330970215542109296386930054600119271783027615635057157354056726525241759254363718634718362920121624566620936420746055008424493472898306195060775705287548452776806612183580661302914632889322407010438875350078519971591983900846545969961971383997234958637498065824393846150491840484858191935606671259680185748778195611043352384208734177433851857356631012927574092805868400118048549941494787368829493687866372026826071987076562864367537757095603497183974055655052694252183543013489107852345177955197575164847115459284660037545584854709947374937966158410404142398757633352017955186448566322015985563419342866689125221534463487912181596227445253723142191847387705966599421812754036136604385388292018102048509177177914852560262425298024923092295621770627700276592881584739948042550677309034200434916329135886446274153184685174625801809013144773586374865282212744506618836678735450371395355632603497782099924165591116020974374914323607878793310150524170474378235535062056170175721753870617511929197156603630283023438195849465943284604829319605151248671236046256539035651733228567582109375412226742238470466647336202928248340651378144753677476718822200983896820197842167240154912533604364378474797706336579054181335230108045599585473796858647089377916593402237955370452738494354411059838879697411430510694012710656285075370398233088678198682981714151852182714936131109639840219124483234239013925538117259541532094350029548076402919827657415140429566669531773040033587015037034974248978981089394530269768782315579381589289968687663676035790553227948227576591048128352197457240223475699146502406367304928332861518750491298734579308749994880486812508029046064462235695627679648989148699242019464585213551657098871183782904371743756252826061405346119873953346775009366257467656384596295218722627774734804912339651942813537250686607820766838625654872790380204867780999917543808157898208252555662349839332174914938649662841168898746650054147482645999727520033700845425925443011903990412317527719937677998475512794480129138420343231548881379325248871720993811957221631481016702748773791618309689373487201689449032996589325119965041096536746189148615994816320408919305772386303963118582133413371100963891138365968959147153709250739984616820464264472907889765255935051365469783646031838206195605785175615049726618176490303049821385347386962122346261140430356009670425470123173604497246232874525751511987718015857428293890256508259882754951108654247042183372640230780456816514205178074181960964015134617607943627696122281261186109127668148805009509638890328777108376510519000761280584739692587687379373066647513879422173546940211576755575689701687341043424465255225689743297161527425581105034950457189317524470704103077608303655367141803887236029488728055907527111155907947569269039785196019397903117680703568019449361068506405685192906450486855356282567872257345441465655411878167177298506128740446208907185021085180250529245903598141175227203205526425977519844107424921792420390800146062259994221097171761187468458026737248013656038669099710713472558597232170275540550850820904189875348292220041789984750305195371790620015093330230238818065191824055508186721647117023075299226522280338204041133866253358150429341151439809399864163656339236206738742593427134447012427027222271975732031944894078563555116396191159859079953990836801294688107715959380849081112519380164148662501410952866809148285031239389609976591759773154327971739457625603650235879315599261708523150742478498142565646930081050619763973955917335454729175267395987901174774492177457719081694895437903145781526673896894106045883514450261306456372376876311299645766994757673406735835372187049351773202147794039725665325817316592021997529428244327781021075321605801044321210672082738761007783324265696247656210631269754915462243439780612539993138939157820085600111713197734431304129982156269850988957227781595245056404355349798558722345219917784195641066221220490390178867379979052705523024120027808647262825175250923325553787377924349159261827361512425922427258726998440141325679546404757424511261028573941934797163831871383707227824226193840210108962712816857322877642102987088955571483977434974181098496336339103977782542251794000221434858862075321226466136144875187351424944695758367447850280131930339019497387161631138008640934085292977297414628361422011205730274273095666588498849651342951882879370161474995046851851168517097581466869942436731400369923812324839206186286630374023513339077719074552242485157487261360750480209609765678620252323562730255570543867291892555716723968719916696518347369874402959423952208634813414840298389394855933272566273181941377354518915443849609664512855614767725649325169238220032297334833317263062000591920674411369132437204035780986764408946723673345499039052836824114220118869492653245313993237641005639967442736936065868512439367371553496963589704707062467430646815115255807723671293586915466771792806746031974436602356648119111753242397922716032139326909004314335725119355917857874389319108367222197495943852176828172055374339879393724206984225860020267022045023414844322314181598371332234673381859957202152129990668553185937651881228156443498428978040444742531731871982498802190561247568350531219366840911136134517403804000412814745274536875301227412262925494310084588680826271693128914142374669732156883069625962978242868284797581983823403452227087573453938971269101748351799713209229117464354550239266293854557426308404732459893743078368758640879143123192283073049753624817085798498705503143573686604535040996796853898025784779104192310525051446968852487263443653694539213721947159981566244543305627982827773495846667570189699009851101644910479936029229616451329952242714049081869480808181447654414760708349431799213476932057754937275811467994778198070449098308878024183545280955762681782215964107122165099951969619323687669599243369390186758304779513485649674966430069785481208610130290264826404023166210182586041727345019708385702227651885903931236272452320065359839076041278980076282207912461632227130519066780296442732287634600602892133160940573960035236081494878557848199236040337092439208957851009536662455380471184198340685899489340265181327419517491251925687298248779829383517102243898868347555622182148660755186284205084412408550884084994052265485357766788644446805043012859884699155016926211730495502683654983406379433415847973906669732718175671111234452127011382877331707036488435606925350128577456371660129278461941357564915082693230100635590879918314801796066648936068648755691547008606027039096400905146093605130372809849899764729342059710761043657066703696367310866167730643613331841643321040734792107756887037541932411017644880716733041762680345281279467292444529191618820953359456671584509414763015370325881092549216206024239983839396395708642683155577379235428304771690538507219399272668305672274429137526802371781759084372697807080996901926950025924210204851939538051551586632664182304521293710468402188066651652314385974980816214201480513551318654530148712982499386242721543453723918022151261158548619753989831108881963588755657935933105978959920532404396845908621932320152322576689695094153983937213087472477329444930537575776943626803283160550603532196850012071951916714260633640561790062186716046386842490672475728557640716313978246391886937896352477082321959404004508295938536515176425101293359114783379956585017661757854299668374172478388386458923199200411963909253542260741994121819501962515981370764670850224792016491740567949940249675930031299570997420265957853900106689258647188390260584175823964971095229447298741832739522922475921569436956820374777310495141288184312103174766005073286130456981418767387058355896805688120629016723897076030395497082734184840690372151798622665819295554207556956541399768142350274905946625927709860445887936755621437096487057446653198147728921772909377998349527699951450611572043941286871215387568425680366223213695080419157374690099170480398859472604862586844497623623187240853395002049892959636187394374089188885689036911289878323258926013311552609011319119625365293846439934656664902711085228344701847683915736238952397327811583993551780220761774507559291383814685265773091522905025091452411340068956610737613204845456455436102387730875943084086997827113154255134720589393394530135481352441767541313850127700241562619361696497099441569335416665909357597847759464689539235162297236734036508058861862098881236770988929447696543603246688744297401303650097702916035364265028446180461281373240060349478897077232623649275155450137317972776152722360085965987366938414676850301661035169883909955706593317132195740032510463036041962952763169728939909450912795453616275934868184558301686342806532050287291050269066437261706617784393111547371497590961161444938121067460372514526162716152129350431411241558498475740918784584101773250305532072376619339702544883354350691135777577655845511367146346292231144978095464050790267558541609542605577834064673561893985031603030466875225797083879932987691829868229706673562466479396533654545442683864043226502960288812985572421981872080402072960774961288861667732888386206099779254168221567137036673913333220865208719044730485930174667935781738308324064595850181772674476903765231787401426365021720931026192630465421127080947696823922073837974820570347931965251392213701998775439311786012381989247070476295875015162999128929330690253435754882514549484693283228982029565069033084704825177441311664647747507234778615180553434668580409871322734530818367945643644301552462741581007310693230807349015905170087536541696009989115695984547029266293740493936776852857230397546911810214692672193338465630536738465378249700495062094035066062445844126279023842427852805515992531882627862715319895671653983854289093115771224386181197249856442339075588125748592176871497213418333172897149776949821172273376698783612127884652893494706769951467858359550741215683750329378223523786651032669234498876906197941165749364183479148239839880020676499672892149834864244687377422864385630644252234612106399524181461661113915864080897404139458798490366826954881978087660219599648467711456981593675679047681120470557406023512374990122585673579651070132515622378437549947472368838210606459694800673160323813511925351483222167614424111446953611828387611157959113103624207415108263220483745404041469904796470731134283683001582473507129223311197890131797016517640330366496067495186286568360325563532056173866027493274177995242438998805813226206812979356158212027364555404144287058571318352389517424712390507589193534905702683028128107047506031817092744348065048434221341522015796267763936426981688514855452068978020362574960435841807355230924102647944364239514748558539802593670172055887679853099710432904048844675417019189122757457524021217448903266811606478379850046398641936457920821052660575039211953114575926214008306603017681201785603286502201714138116421559867026375311555548219583889053935445921805872724337498992420415428166668218463748633375227290779942089605452648638625164117180491129034513781400215068999667620807326513804277924609307622634469941591932231425650299964031343835640877666895377598574734031204770918865963555799446436882059812420404778
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 16:40 | 显示全部楼层
0294380393245972220754173958959669203405216168083758892163604858478992966390310734994566702783061048313086287268066101530074552166989385738378269097502607869124507709669735574497106387837908360856332477401142660458879771284333508934175212084313354915580594521750376672813681898970107579503497593114711385117752908470838264693094366383785148879872368877153477033345657025400496403998776074595127614593669469550887779631840009322997373677051851257323323012713421093706868095026436222551087287714163560171627626704016899681628721332642226837785532788782231020453976227258301490260971093119499568595083459850925880336301955189184621299091492015583829860756819073737595857334826171379470359250397212631431619215957145108174403411484790438660128424464336285739244231676741103641755777699188671991051145690200290577169917749774835948981011565055725350124251959593148344041711622220550458967163675447804289348838550027521149752624642112201077486233347624618257659717840398043661766956056704993678935037089317461756028207467905811080628034889313676877313323472117854103828921308058036930285391038470452801834405831325274412992835573270402822090195156005444976463593206508376086447398969270938112050425126693083483999995686021635614894016744256407846935015273024574943572220500940368081032113689894644306204165987836040681133121713350496050494416547288392637860786838573151536637341631256612260323597774247394032479347874
077035272543653245530843825086569386433002095712071912282668923760927352446757664798179762283170924818714318947444992832905108706686626390146275460018668358362206244555382886714362141577363824485257066465342300200338608718568338709528256423189233730582746782510290523921446411759070008286287491564721296222310014984277391058526271209570263342513906927554124992582689875591304848905908366504738656900598072651268264380980008076871688974976700574722828516543093546942370129690122520004177597527809934139914945567565541579128901414180718097081801066862600033474678349211635433074176655619786541294433157961085673390721097081524769436020823107737731925593559191936150999224185186976251182197159844939642292322258693958320584953760017338824291681325700319849094280517852878284256002154923323503294187284260110962343206148554757903880284922813939713097918056244770349429953058590941503123740021344543160704953880911787057104568621162106965502302888661706031458022288434490687940489074406716455756516059639748816474457540940089191108394512623399045336477254174133133082115375898307739040254973975162082583789838499620087474962233143635455359971047289639626291467554228173562466580421200727540127398226965180259613033432979286533006365417567600336968824392639128071312303876007603995728565833339083859253424933715307045747148274355103741714702400686741914187439823044920277200968228247464080277906810474160288261344080325660753023017203198107079689305195414523932766178390582894393214614889482169591857949850226385831870447329029979047319375380354392028570635067248424500892068971299530821374733525579298256580346977950497405332950622058458697678237654735809267075389173665240157752589020235488322748067896132846682186597286978559267282682265645757795867057109772839660510151638716361532191820365272989758680778644304489662867039318848692193183918292717255450376773307685630865760066534262225453505762903086271893736432744808355892822010237495153466526285750422295099544601442880185906144337967914271741327828697599825999381908447746977522056789839537857015460915769500612868961082551937348661256822501058575237505045050364162780440667690513056480719101413228506348266572682851193305943371737389962365471553481659163008683852090549106019459675822370
19115135811420715212206735219487770695216085317174775805425541380389788737160582417719042524010563706617929963958087067170838729502380572385476104950617326895879482403195694990005945937198490041045500344150140661545269946090944413914390718663090092496918124688130881262423587872048560896082340376774375094967684510580595799771890066053549033599617842451210961448770631874669102923566277711652035226470161662964880838089978876877693082208565300681539408567480413494694918707049926602100664558198328861306780214603698931744999391072312304050883424853837967422088470603853349439281475196857912921744419173863987391559089158593107504494199694258569205038912775500925600292255660282457330541643704829653515326957573119860331538617671270723229626701224806123221954888918480401493577571313023088975013485736003571343070466281571787200215787059833028564018514036741685235792023064406441594485865662469054779640865724626118340632130251262308969497136423345854193511283731321572321015776878841479867523644417112984723547631427158502934347464341272302257357920970834399104983940197899798703
5183778601077866722610224168449868639887422758063127258147439667671940444429007128491428625186708509235845327709144109957535765981217852375684893442967036868618122992803343345669649346077090359223180407284982764095587385449145541648062109861909044933176128896613532541306231399197146233276848722418411908884105481927087894893959068177857958891858788142609924176775386238240600245182114903516012449289394057849405543217358977950386779244861476944873467186358381729662707334140402763102982156230314215774337929461664937436156045903606029858122457608525270057006187760958274597496740531588216269598285114300632089773047313346117214294580540717887622301146255851052093076177149327860354126271988052282686410705504936437055581694583084065096044732186826685821690378486803228047986402170631565368748929046767901586470937947876237301382202637378882282756416372587267092160243407727929856567982523494642837616291871755699345469372475974464437458612357776884264734692436590955855316257156480796903405267150476075474267696003825581403435471652083459886453843259390815439291893908989610908352199251905353039835908151628924757104335478642495498074138874538602311332959139063600669453943743869075958912128875800780408291197520709527813333555023277676178339138179410510941299968043010389947505124323233143112066359872661861008471725469690872663745685846664616209322342768068460171851670242767112591308005958305365818003599121444768528653498539701387608081702091847286335136878374525129293629437313779779416816313098368883362459248827004253327531017403740185815519266314758803245031634982894409094145943570983933145407793763853388482405696458366190658036231205976003712766483099512585931021429023730605200088341574972440502886340250002874705523368854106859338903966237991377648571577209374968105571827778142965924425166670311013582062531651890693646266361337678367700157490956144496282820569082033001312128987300785520628091
503588033407174623351114283809655065181827117782596414734227588580316247364825350887927629907481324269246171416952106854881827536161278695521641238326324616403460277105305221712741690983171442584275435932519370836792052487018621270857453151819707979762415632236962753030362501005740150318524177138171691695906655048049426747369665605181952772974044078248741635308707480344712630755045301876873451163126000257176570829411344715905832685946402297548906186856971552932533367919290450918133898903953122611407760414634139512025319906872069045065431736079935243479108203969547806192645325464405312458636202601615695788832641991034551974179214039606181745946733221136711305167584497072208063824930928534825774708275493986060850848638654991291222039189537933232181434499845868055726791555352521211390772338903797942748520930950464159963919605329603029273927466390623419008488221980004075439025071843016848086615700902205315827385741726790231019356606424366083408020278639226365245339550470624410895779104
9298908397097715806857036527872932846771952274875201321856644284239116502005786314083266606564469023548865452436995428173054383481532525156311603438941440612599662264959878769003712412406305072713049361060777519351766684350979095112470377728527045181653556285621656761979382960837252084759203181114384404005114613990326273362146150667851880079327563486444803726963278475818453468509565365380723807736793526242145533088833679727074192838872685484977387306670007551965761431583941102042492623133242770270821710047137152167948872468741189259805623910487138975034203376673344989060052111727844670530521327425332189734978888307943626099125569741350839434061750712876445222039557455150019442996232739317091487905148812821582894579949748623433452865460274945133477267345362799684706610937707688048379567860499887327287273158785195505216946986571759372875984514994087366735699690322212619073372131984972873714823922056361158276719293687517950957314775347729780073870450969204201405641649670458849057466793682155521901095027966023590200629563426621697556166261956721403439803621918243177242110484823901622121433246394511832190737036276362556947535372619436126996645342229
5890067369520148703938650150870744147352202207704110700883280307315450410857217624486003245745296424458015508875355814451289181736863461165671110501511097147605443615379202075461150735291679353598037462331580354025072935854221349502396550048184562563277949304419262829413630072241507581444776889555696160257414238592744157404772176434749486631831826482100837857490802221991221446941174002708561590951048858459673923326023018437403287028085697823111824603926421290247291925352267875678978685646005705451089453741906493715588942533297034869826933866345748078010787192541297849071552766834053624072289750180164174866952266394688977998297470344148466052329775319142666
3847390681054167116806613126291883476480063965476234519254058040025772795085906181732600018835667757624963508451226641055755164513447026208348548077617370192362640638483137184208747722309446797866122164968984232278924876260516789868647573901226036106792466172839001626734405990322402653634355030155298326451986588130394258661773498728023189254427801611331835427610325800239394260785875694948511930071585392984316396
7575531352484221274814864027297307155457109423432471856970523635672286551516265672389248080659279448953078708153606666741314598260798811278754656313007785743484189610809499119436037561075326359414143476882494692530787790693275290895909945065272071979419682741840819830567497688086236460819345623637702467815073133466197923119939117195979352833117496820500577299938566476984260815518940866776320855483159836188850448339911351505132909703990088919063133375804094886955895465912648104534621430295733375992898959329664444686900648674531661878821297194146191914132978673375283702995190706179924178140249356285006536273771636355569720003246996130665282451695167273161831
393867558791278264933758040011059211372270839123518459709107480669852696080909181872978501574064544548264471078633386599113188810137746318984496745989011540334259315347740082110734818471521253374507271538131048296612979081477663269791394570357390537422769779633811568396223208402597025155304734389883109376.
这是前面的模仿手工计算的快速乘法程序结合我的快速幂程序,算出来的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-23 10:54 | 显示全部楼层
Private Sub Command1_Click()
Dim A, B
A = Val(Text1)
a1 = A
q = Val(Text2)
m = Sqr(q)
t = Trim(Text4)
ts = Timer
If Right(A, 1) Mod 2 = 0 Then
A = A + 1
Else
A = A
End If
s = 0
a2 = A
Do While a2 <= m
Do While InStr(fenjieyinzi0(Trim(a2)), "*") > 0
a2 = a2 + 2
Loop
B1 = a2
b2 = MPC(Trim(t), Trim(B1))

C1 = fenjieyinzi0(Val(B1))
C2 = fenjieyinzi0(Trim(b2))

If InStr(C1, "*") = 0 And InStr(C2, "*") = 0 Then
s = s + 1
Print B1, b2
Text3 = Text3 & "/" & B1 & "/" & b2 & vbCrLf
Else
s = s
End If
a2 = a2 + 2

Loop
a2 = a2
s1 = s
Do While a2 + 2 <= q
Do While InStr(fenjieyinzi0(Trim(a2)), "*") > 0
a2 = a2 + 2
Loop
B1 = a2
b2 = MPC(Trim(t), Trim(B1))

C1 = fenjieyinzi0(Val(B1))
C2 = fenjieyinzi0(Trim(b2))

If InStr(C1, "*") = 0 And InStr(C2, "*") = 0 Then
s1 = s1 + 1
Print B1, b2
Text3 = Text3 & "/" & B1 & "/" & b2 & vbCrLf
Else
s1 = s1
End If
a2 = a2 + 2

Loop
Combo1 = a1 & "与" & q & "之间打头的素数有" & s1 & "组偶数" & t & "的哥猜素数和对:(用时" & Timer - ts & "秒)" & vbCrLf & Text3

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-8 17:18 | 显示全部楼层
Private Sub Command1_Click()
Dim A, B
A = Val(Text1)
a1 = A
q = Val(Text2)
m = Sqr(q)
t = Trim(Text4)
ts = Timer
If Right(A, 1) Mod 2 = 0 Then
A = A + 1
Else
A = A
End If
s = 0
a2 = A
Do While a2 <= m
Do While InStr(fenjieyinzi0(Trim(a2)), "*") > 0
a2 = a2 + 2
Loop
B1 = a2
b2 = MPC1(Trim(t), Trim(B1))

C1 = fenjieyinzi0(Val(B1))
C2 = fenjieyinzi0(Trim(b2))

If InStr(C1, "*") = 0 And InStr(C2, "*") = 0 Then
s = s + 1
Print B1, b2
Text3 = Text3 & "/" & B1 & "/" & b2 & vbCrLf
Else
s = s
End If
a2 = a2 + 2

Loop
a2 = a2
s1 = s
Do While a2 + 2 <= q
Do While InStr(fenjieyinzi0(Trim(a2)), "*") > 0
a2 = a2 + 2
Loop
B1 = a2
b2 = MPC1(Trim(t), Trim(B1))

C1 = fenjieyinzi0(Val(B1))
C2 = fenjieyinzi0(Trim(b2))

If InStr(C1, "*") = 0 And InStr(C2, "*") = 0 Then
s1 = s1 + 1
Print B1, b2
Text3 = Text3 & "/" & B1 & "/" & b2 & vbCrLf
Else
s1 = s1
End If
a2 = a2 + 2

Loop
Combo1 = a1 & "与" & q & "之间打头的素数有" & s1 & "组差为" & t & "的素数对:(用时" & Timer - ts & "秒)" & vbCrLf & Text3

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 10:15 | 显示全部楼层
如下这个乘法程序靠谱但就是速度不快:

Public Function MbC(D1 As String, D2 As String) As String
Dim X, Y ';两数长度
X = Len(D1): Y = Len(D2)
Dim A() As Integer
ReDim A(1 To X + Y, 1 To Y)
Dim I, J, C1, C2, CJ, JW
For J = Y To 1 Step -1 ';D2
JW = 0 ';进位清0
C2 = Mid(D2, J, 1) ';每位数
For I = X To 1 Step -1 ';D1
  C1 = Mid(D1, I, 1) ';每位数
  CJ = C1 * C2 + JW ';计算乘积
  c = I + J: r = Y + 1 - J
  A(c, r) = CJ Mod 10 ';本位
  JW = CJ \ 10 ';进位
Next
A(c - 1, r) = JW
Next
Dim B() As Integer
ReDim B(1 To X + Y)
JW = 0
For I = X + Y To 1 Step -1
Bit = JW
For J = 1 To Y
  Bit = Bit + A(I, J)
Next
B(I) = Bit Mod 10
JW = Bit \ 10
Next
If B(1) > 0 Then
MbC = MbC & B(1)
Else
MbC = MbC
End If
For I = 2 To X + Y
MbC = MbC & B(I)
Next
End Function
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-22 19:20 , Processed in 0.093750 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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