数学中国

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

[原创]大整数的乘法

[复制链接]
 楼主| 发表于 2021-4-2 18:35 | 显示全部楼层
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801*
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801=
2678145490787694710138406683675886762424440548647327525594133873038347266950777818028529804877891353347244255046176220880989519574806598935727647635506939520211209794328712328126947740602255036264392628020291100698432900022333877728824270241063030019536831205264726059774673235680796770108334187808344470141093691232926021244583649747591446066921535333854157441330339217364515328375889937313870826987520723914810358707312468857074455945610038118763873992681688857200178452843740327143990247797893489008808544535536081089994800692174759199578596435124153437689121057209523619989593900355037400039597165241729693472001589594642879166693443994939359639600558001937547209387175085119128575833396037478944824322315197771750730768383267287661855880237549141571520374996029107650341071074081501632143441365461865431362023790463469688071768208320226561675630348708531708110373889241713511809029065048200924851629507265095151843687852114948736130517024578482059771284515915597919026074110811882700307150650858080695566672584075215926450360584738705106755945308199980660478183563586945902705730231409948938478910176292179410952310592864745025373902249844607078729230098512959498522851990040833671698873183076996740726479481352429756295966452788332789259316653805673821716832204368483794501474641036177256005810416507649770210480747056764697918800240201155395628561684853684747063434500664449114760179367086926249813006056735202795763742271472136500817313178050955623517148960973128433455798444839070215800699075256371341531892841721456473301085595261371522078416420399702683504171019191363372883472415693921509069484448792009627325245658854979159002549542769741504596589556474585723101403486046952706847309188488390899096649210853675228464611999630360164703837131620319658277117300208326944026347808645954842782309633205645471959842390075986572806483755223497552549948718545978420793425036666212191832327909389117021539426917904222971515424022606157676379417252939026404363841301595348953340657745965591468370831371449860774296757556463049237248472613472436666799615694672489600751763956185893123579218797539971253828850163437053164723845196089466298000486042246621634263064752906475198879616484926366053597071510886820878425907736453843197228282179943365206039514850477377542684361730162273246709577442085159313947668552462343596819299335060863266863059421286080919061657175757802930378698062290163092494909661982639303946271889619023417245433500782685534406291391527022657608608130680134939380126048353657648559735671562230714451258764762350451448379438849319710473631625533527602085050858633346936315115309333355986556546113134787213610042970405680162084678021281774169131725296977361816657904233850711837826724976507876061043779177845550646612327663283839673950405472039432309339110648301347672597370034346896334064135099613033528785924976781865447506814375627647103020761819104412269362847848884053177378762432543285984193091289854949394023586451139393716370633759317698908834326333339634557238526607966375935960004339535161203546369910853171524516945554862019134684985868547068709986010719120259421723270478586992153989283736650948010894951434857207445141886625290777550599700738909777829412358941157674866550887608199469723859806486384262574182811908513849905040209776132986875560077482527819093584150609347560543627976011009349905362597935257895287412087233810106693141683912683308201407373637490835862452911394718399632093441745957478079754723679119343225931665785380948807114301164623717144211285944154289093317610519159281033583963015810556464180819928345256832572962092994993950655913067768151113345566231088759030148164710287289335782462899525700500822021472132532771242198844498579102733028256523810973405350508253183399668290339844052874956694050028526577775764032598023622192221226501334606994447870277619118208162133562541678250491647671042612088902952091163094215645902682086024337098910110924115381788866213335441814530141911754446270296630426675020592640816713810936850961517475097707179713115856513919631998747192606018612535436009162735908155778165736923393260822217415131632296810207091918499370220533980666393617256227781299273913099896641458499949922475383775878771011361417556799406151773618626138749998464514570482965286184387350245762317271666329142667987131139265167425606863654107927682419958167046956962340419295394058625063862272314570914511355913547470055072878835349142049813368019960713974852351833144227544851625677753419141348585495260230041111323576432417502998832485027071744397105338790364666312325483218209150368759120749671419554589928540715813531144241705501211397506662448276056294585639532800634727428900861538486753011006379264618338782036690340859441153926551954112364946638768223012718907190897165613382555036872673785444132692292217184974818914501886689736449912131900762592363447945036085692999163815947845753538999001633767986447907729462453017601有4888位,用时9.046875秒(快慢还跟电脑有关,同样的程序,这是我再单位实验的,比在家里快了不少。)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-2 22:16 | 显示全部楼层
那个模仿手工计算的乘法程序改成如下这样的分治法程序:

Private Sub Command1_Click()
Dim a, B
Dim ja(), jb()
a = Trim(Text1): B = Trim(Text2): a3 = a: b3 = B
ts = Timer
If Len(a) < Len(B) Then
a = String(Len(B) - Len(a), "0") & a
B = B
Else
a = a
B = String(Len(a) - Len(B), "0") & B
End If
x = Len(a) \ 2: Y = x + 2: x11 = x
sb = Y * 2
a = String(Val(sb * 2 - Len(a)), "0") & a
B = String(Val(sb * 2 - Len(B)), "0") & B
x = sb / 2
ReDim ja(0 To x - 1): ReDim jb(-x + 1 To x - 1)
For I = 0 To x - 1
ja(I) = Mid(a, Len(a) - 4 * I - 3, 4)
jb(I) = Mid(B, Len(B) - 4 * I - 3, 4)
'倒序输出,减少加法计算量,提高速度
Next
For i0 = -1 To -x + 1 Step -1
jb(i0) = String(4, "0")
Next

jw2 = 0: jw3 = 0
For i1 = 0 To x - 1

d3 = ""
   For i2 = 0 To x - 1
a1 = Mid(ja(i2), 1, 2): a2 = Mid(ja(i2), 3, 2)
B1 = Mid(jb(i1 - i2), 1, 2): b2 = Mid(jb(i1 - i2), 3, 2)
C1 = Val(a1) * Val(B1): C2 = Val(a2) * Val(b2)
c3 = Val(a1) + Val(a2): c4 = Val(B1) + Val(b2)
C5 = Val(c3) * Val(c4)
D1 = Val(C5 - C1 - C2)
D2 = Val(C1 & "0000") + Val(D1 & "00") + Val(C2)
d3 = Val(D2) + Val(d3)
Print qqdl(Trim(d3))
  Next
  d3 = Val(d3) + Val(jw3)
  d5 = d3
  If Len(d3) <= 4 Then
  jw3 = 0
  d3 = String(4 - Len(d3), "0") & d3
  Else
  jw3 = Left(d3, Len(d3) - 4)
  End If
  d3 = Right(d3, 4)

d4 = Trim(d3) & Trim(d4)
Next

d4 = Trim(jw3) & Trim(d4)
d4 = qqdl(Trim(d4))
d10 = Mid(d4, 1, 88)
Text3 = d4 & "有" & Len(d4) & "位,用时" & Timer - ts & "秒"
End Sub

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

End Sub

'这个程序的验证结果:12345*12345=152399025有9位,用时0秒。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-2 22:24 | 显示全部楼层
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801*
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801=
2678145490787694710138406683675886762424440548647327525594133873038347266950777818028529804877891353347244255046176220880989519574806598935727647635506939520211209794328712328126947740602255036264392628020291100698432900022333877728824270241063030019536831205264726059774673235680796770108334187808344470141093691232926021244583649747591446066921535333854157441330339217364515328375889937313870826987520723914810358707312468857074455945610038118763873992681688857200178452843740327143990247797893489008808544535536081089994800692174759199578596435124153437689121057209523619989593900355037400039597165241729693472001589594642879166693443994939359639600558001937547209387175085119128575833396037478944824322315197771750730768383267287661855880237549141571520374996029107650341071074081501632143441365461865431362023790463469688071768208320226561675630348708531708110373889241713511809029065048200924851629507265095151843687852114948736130517024578482059771284515915597919026074110811882700307150650858080695566672584075215926450360584738705106755945308199980660478183563586945902705730231409948938478910176292179410952310592864745025373902249844607078729230098512959498522851990040833671698873183076996740726479481352429756295966452788332789259316653805673821716832204368483794501474641036177256005810416507649770210480747056764697918800240201155395628561684853684747063434500664449114760179367086926249813006056735202795763742271472136500817313178050955623517148960973128433455798444839070215800699075256371341531892841721456473301085595261371522078416420399702683504171019191363372883472415693921509069484448792009627325245658854979159002549542769741504596589556474585723101403486046952706847309188488390899096649210853675228464611999630360164703837131620319658277117300208326944026347808645954842782309633205645471959842390075986572806483755223497552549948718545978420793425036666212191832327909389117021539426917904222971515424022606157676379417252939026404363841301595348953340657745965591468370831371449860774296757556463049237248472613472436666799615694672489600751763956185893123579218797539971253828850163437053164723845196089466298000486042246621634263064752906475198879616484926366053597071510886820878425907736453843197228282179943365206039514850477377542684361730162273246709577442085159313947668552462343596819299335060863266863059421286080919061657175757802930378698062290163092494909661982639303946271889619023417245433500782685534406291391527022657608608130680134939380126048353657648559735671562230714451258764762350451448379438849319710473631625533527602085050858633346936315115309333355986556546113134787213610042970405680162084678021281774169131725296977361816657904233850711837826724976507876061043779177845550646612327663283839673950405472039432309339110648301347672597370034346896334064135099613033528785924976781865447506814375627647103020761819104412269362847848884053177378762432543285984193091289854949394023586451139393716370633759317698908834326333339634557238526607966375935960004339535161203546369910853171524516945554862019134684985868547068709986010719120259421723270478586992153989283736650948010894951434857207445141886625290777550599700738909777829412358941157674866550887608199469723859806486384262574182811908513849905040209776132986875560077482527819093584150609347560543627976011009349905362597935257895287412087233810106693141683912683308201407373637490835862452911394718399632093441745957478079754723679119343225931665785380948807114301164623717144211285944154289093317610519159281033583963015810556464180819928345256832572962092994993950655913067768151113345566231088759030148164710287289335782462899525700500822021472132532771242198844498579102733028256523810973405350508253183399668290339844052874956694050028526577775764032598023622192221226501334606994447870277619118208162133562541678250491647671042612088902952091163094215645902682086024337098910110924115381788866213335441814530141911754446270296630426675020592640816713810936850961517475097707179713115856513919631998747192606018612535436009162735908155778165736923393260822217415131632296810207091918499370220533980666393617256227781299273913099896641458499949922475383775878771011361417556799406151773618626138749998464514570482965286184387350245762317271666329142667987131139265167425606863654107927682419958167046956962340419295394058625063862272314570914511355913547470055072878835349142049813368019960713974852351833144227544851625677753419141348585495260230041111323576432417502998832485027071744397105338790364666312325483218209150368759120749671419554589928540715813531144241705501211397506662448276056294585639532800634727428900861538486753011006379264618338782036690340859441153926551954112364946638768223012718907190897165613382555036872673785444132692292217184974818914501886689736449912131900762592363447945036085692999163815947845753538999001633767986447907729462453017601有4888位,用时76.71875秒(这就是这个程序的计算结果,直接计算这么大的数并不必模仿手工计算的程序快)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-2 22:30 | 显示全部楼层
899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999550000000000000000000000000000000000000000000000009有321位,用时1.359375秒(这也是该程序计算的,并不快,再改一下,改成3位一组的试试?)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-2 22:38 | 显示全部楼层
899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999550000000000000000000000000000000000000000000000009有321位,用时0.5859375秒(快了一些,还是不如模仿手工的乘法程序快)代码如下:

Private Sub Command1_Click()
Dim a, B
Dim ja(), jb()
a = Trim(Text1): B = Trim(Text2): a3 = a: b3 = B
ts = Timer
If Len(a) < Len(B) Then
a = String(Len(B) - Len(a), "0") & a
B = B
Else
a = a
B = String(Len(a) - Len(B), "0") & B
End If
x = Len(a) \ 3: Y = x + 2: x11 = x
sb = Y * 2
a = String(Val(sb * 3 - Len(a)), "0") & a
B = String(Val(sb * 3 - Len(B)), "0") & B
x = sb / 2
ReDim ja(0 To x - 1): ReDim jb(-x + 1 To x - 1)
For I = 0 To x - 1
ja(I) = Mid(a, Len(a) - 6 * I - 5, 6)
jb(I) = Mid(B, Len(B) - 6 * I - 5, 6)
'倒序输出,减少加法计算量,提高速度
Next
For i0 = -1 To -x + 1 Step -1
jb(i0) = String(6, "0")
Next

jw2 = 0: jw3 = 0
For i1 = 0 To x - 1

d3 = ""
   For i2 = 0 To x - 1
a1 = Mid(ja(i2), 1, 3): a2 = Mid(ja(i2), 4, 3)
B1 = Mid(jb(i1 - i2), 1, 3): b2 = Mid(jb(i1 - i2), 4, 3)
C1 = Val(a1) * Val(B1): C2 = Val(a2) * Val(b2)
c3 = Val(a1) + Val(a2): c4 = Val(B1) + Val(b2)
C5 = Val(c3) * Val(c4)
D1 = Val(C5 - C1 - C2)
D2 = Val(C1 & "000000") + Val(D1 & "000") + Val(C2)
d3 = Val(D2) + Val(d3)
Print qqdl(Trim(d3))
  Next
  d3 = Val(d3) + Val(jw3)
  d5 = d3
  If Len(d3) <= 6 Then
  jw3 = 0
  d3 = String(6 - Len(d3), "0") & d3
  Else
  jw3 = Left(d3, Len(d3) - 6)
  End If
  d3 = Right(d3, 6)

d4 = Trim(d3) & Trim(d4)
Next

d4 = Trim(jw3) & Trim(d4)
d4 = qqdl(Trim(d4))
d10 = Mid(d4, 1, 88)
Text3 = d4 & "有" & Len(d4) & "位,用时" & Timer - ts & "秒"
End Sub

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

End Sub

Public Function MbC(D1 As String, D2 As String) As String
Dim x, Y ';两数长度
x = Len(D1) \ 4: Y = Len(D2) \ 4
d3 = String(4 * x + 4 - Len(D1), "0") & D1
d4 = String(4 * Y + 4 - Len(D2), "0") & D2
x = x + 1: Y = Y + 1
Dim a() As String
ReDim a(4 To 4 * x + 4 * Y, 4 To 4 * Y)
Dim I, J, C1, C2, CJ, JW, s, t
For J = 4 * Y To 4 Step -4 ';D2
JW = 0 ';进位清0
C2 = Mid(d4, J - 3, 4) ';每位数
For I = 4 * x To 4 Step -4 ';D1
C1 = Mid(d3, I - 3, 4) ';每位数
CJ = Val(C1) * Val(C2) + JW ';计算乘积
c = I + J: r = 4 * Y + 4 - J
a(c, r) = String(4 - Len(CJ Mod 10000), "0") & CJ Mod 10000 ';本位
JW = CJ \ 10000 ';进位
Next
a(c - 4, r) = JW
Next
Dim B() As String
ReDim B(1 To x + Y)
JW = 0
For s = x + Y To 1 Step -1
Bit = JW
For t = 1 To Y
Bit = Bit + Val(a(4 * s, 4 * t))
Next
B(s) = String(4 - Len(Bit Mod 10000), "0") & Bit Mod 10000
JW = Bit \ 10000
Next
If B(1) > 0 Then
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6) & B(1)
Else
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6)
End If
For s = 2 To x + Y
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6) & B(s)
Next
End Function

'该程序已经做了修改,是模仿手工计算的程序,采用4位一组,在位数少于5000的时候,此程序居然比快速傅里叶变换的乘法还快!

Public Function MPC1(D1 As String, D2 As String) As String 'jiafa
  Dim x, Y, JW '两数长度
If qqdl(D1) = "0" Then
MPC1 = D2
ElseIf qqdl(D2) = "0" Then
MPC1 = D1
Else
If Len(D1) >= Len(D2) Then
  d4 = String(Len(D1) - Len(D2), "0") & D2
  d3 = D1
  Else
  d4 = D2
  d3 = String(Len(D2) - Len(D1), "0") & D1
  End If
  x = Len(d3) \ 8: Y = Len(d4) \ 8
  If 8 * x < Len(d3) Then
  d3 = String(8 * x + 8 - Len(d3), "0") & d3
  d4 = String(8 * Y + 8 - Len(d4), "0") & d4
  x = x + 1: Y = Y + 1
  Else
  x = x: Y = Y
  d3 = d3: d4 = d4
  End If
  Dim a() As String, B1() As String, C1() As String, E1() As String
  ReDim a(1 To x)
  ReDim B1(1 To Y)
  ReDim C1(1 To x)
  ReDim E1(1 To x)
  Dim I, J, C2, CJ
  For J = Y To 1 Step -1 'D2
  JW = 0 '进位清0
  B1(J) = Mid$(d4, J * 8 - 7, 8) '每位数
For I = x To 1 Step -1  'D1
     a(I) = Mid$(d3, I * 8 - 7, 8) '每位数
   C1(I) = Val(a(I)) + Val(B1(I)) + Val(JW) '计算jia
   If Len(C1(I)) < 8 Then
   C1(I) = String(8 - Len(C1(I)), "0") & C1(I)
   Else
   C1(I) = C1(I)
   End If
     JW = Left(C1(I), Len(C1(I)) - 8)
     E1(I) = Right(C1(I), 8)
    Next
    Next
    For r = 1 To x
    If JW = 0 Then
    MPC1 = MPC1 & E1(r)
    Else
    jc = jc & E1(r)
    MPC1 = JW & jc
    End If
    Next
   MPC1 = qqdl(Trim(MPC1))
   End If
  End Function
  
  Public Function MPC(D1 As String, D2 As String) As String ';jianfaqi
Dim x, Y ';两数长度
If Len(D1) >= Len(D2) Then
d4 = String(Len(D1) - Len(D2), "0") & D2
d3 = D1
Else
d4 = D2
d3 = String(Len(D2) - Len(D1), "0") & D1
End If
x = Len(d3): Y = Len(d4)
Dim a() As Integer, B1() As Integer, C1() As Integer, E1() As Integer
ReDim a(1 To x)
ReDim B1(1 To Y)
ReDim C1(1 To x)
ReDim E1(1 To x)
Dim I, J, C2, CJ, JW
For J = Y To 1 Step -1 ';D2
JW = 1 ';yu jie weichuzhi
B1(J) = Mid(d4, J, 1) ';每位数
For I = x To 1 Step -1  ';D1
   a(I) = Mid(d3, I, 1) ';每位数
   C1(I) = 10 + a(I) - B1(I) - 1 + JW ';计算jia
   JW = C1(I) \ 10
   E1(I) = C1(I) Mod 10
  Next
  Next
  For r = 1 To x
  MPC = MPC & E1(r)
  For I = 1 To Len(MPC)
    If Not Mid(MPC, I, 1) = "0" Then
        Exit For
    End If
Next
strtmp = Mid(MPC, I)
  If Len(strtmp) = 0 Then
  MPC = "0"
  Else
MPC = strtmp
End If
  Next
  
  
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-2 22:47 | 显示全部楼层
本帖最后由 ysr 于 2021-4-2 14:52 编辑

51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801*
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801=
2678145490787694710138406683675886762424440548647327525594133873038347266950777818028529804877891353347244255046176220880989519574806598935727647635506939520211209794328712328126947740602255036264392628020291100698432900022333877728824270241063030019536831205264726059774673235680796770108334187808344470141093691232926021244583649747591446066921535333854157441330339217364515328375889937313870826987520723914810358707312468857074455945610038118763873992681688857200178452843740327143990247797893489008808544535536081089994800692174759199578596435124153437689121057209523619989593900355037400039597165241729693472001589594642879166693443994939359639600558001937547209387175085119128575833396037478944824322315197771750730768383267287661855880237549141571520374996029107650341071074081501632143441365461865431362023790463469688071768208320226561675630348708531708110373889241713511809029065048200924851629507265095151843687852114948736130517024578482059771284515915597919026074110811882700307150650858080695566672584075215926450360584738705106755945308199980660478183563586945902705730231409948938478910176292179410952310592864745025373902249844607078729230098512959498522851990040833671698873183076996740726479481352429756295966452788332789259316653805673821716832204368483794501474641036177256005810416507649770210480747056764697918800240201155395628561684853684747063434500664449114760179367086926249813006056735202795763742271472136500817313178050955623517148960973128433455798444839070215800699075256371341531892841721456473301085595261371522078416420399702683504171019191363372883472415693921509069484448792009627325245658854979159002549542769741504596589556474585723101403486046952706847309188488390899096649210853675228464611999630360164703837131620319658277117300208326944026347808645954842782309633205645471959842390075986572806483755223497552549948718545978420793425036666212191832327909389117021539426917904222971515424022606157676379417252939026404363841301595348953340657745965591468370831371449860774296757556463049237248472613472436666799615694672489600751763956185893123579218797539971253828850163437053164723845196089466298000486042246621634263064752906475198879616484926366053597071510886820878425907736453843197228282179943365206039514850477377542684361730162273246709577442085159313947668552462343596819299335060863266863059421286080919061657175757802930378698062290163092494909661982639303946271889619023417245433500782685534406291391527022657608608130680134939380126048353657648559735671562230714451258764762350451448379438849319710473631625533527602085050858633346936315115309333355986556546113134787213610042970405680162084678021281774169131725296977361816657904233850711837826724976507876061043779177845550646612327663283839673950405472039432309339110648301347672597370034346896334064135099613033528785924976781865447506814375627647103020761819104412269362847848884053177378762432543285984193091289854949394023586451139393716370633759317698908834326333339634557238526607966375935960004339535161203546369910853171524516945554862019134684985868547068709986010719120259421723270478586992153989283736650948010894951434857207445141886625290777550599700738909777829412358941157674866550887608199469723859806486384262574182811908513849905040209776132986875560077482527819093584150609347560543627976011009349905362597935257895287412087233810106693141683912683308201407373637490835862452911394718399632093441745957478079754723679119343225931665785380948807114301164623717144211285944154289093317610519159281033583963015810556464180819928345256832572962092994993950655913067768151113345566231088759030148164710287289335782462899525700500822021472132532771242198844498579102733028256523810973405350508253183399668290339844052874956694050028526577775764032598023622192221226501334606994447870277619118208162133562541678250491647671042612088902952091163094215645902682086024337098910110924115381788866213335441814530141911754446270296630426675020592640816713810936850961517475097707179713115856513919631998747192606018612535436009162735908155778165736923393260822217415131632296810207091918499370220533980666393617256227781299273913099896641458499949922475383775878771011361417556799406151773618626138749998464514570482965286184387350245762317271666329142667987131139265167425606863654107927682419958167046956962340419295394058625063862272314570914511355913547470055072878835349142049813368019960713974852351833144227544851625677753419141348585495260230041111323576432417502998832485027071744397105338790364666312325483218209150368759120749671419554589928540715813531144241705501211397506662448276056294585639532800634727428900861538486753011006379264618338782036690340859441153926551954112364946638768223012718907190897165613382555036872673785444132692292217184974818914501886689736449912131900762592363447945036085692999163815947845753538999001633767986447907729462453017601有4888位,用时34.54688秒(直接计算这么大的数还是不行,还是慢,不如直接用那个模仿手工计算的程序,模仿手工计算的程序不能替代的,计算5000位以内的数用模仿手工计算的,超过5000以及1万的用快速傅里叶变换做的乘法程序,超过10万的可以采用分治法和模仿手工计算的乘法程序结合的程序)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-3 00:13 | 显示全部楼层
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801*
51750801837147361345408953922231823615475578427966187002956389087112242842559611794590895524485015222232340190036677951157401229518412775512617768569186939216558814320044037671525512763073762127357272238470370174050144130962253437215369727381909754581075278888137687950749577751967083233227932391898438489520107788418593104216764745143648165875043861634459264809523254076330115365651752264033578829280651927862062277153553168278640509846511729608378923480331705134467105387853440058108864733429085916392927954109944314725590758950098556991513109760871599045355054258610189920009222629391227784118536578933067532162200768112408111142115021110731900107445187734955403922470144187293970602024056652942406064101184615113779243566842311336047149767396006622923831778833173731302325162741660053390002572456069410383734906953419854919650114722834689335022576764661864630532595250136417800041415827379233503655173380741283758557001102498493237113089198106283487003030225058520047964863929279622015825870972146222540614667928697270131499340362072956956518213266361286372027834000838185920579641835952404678850816456467012890793914108776148483471455515695596694573035435841962871983614397882366460940068418989292218104650923374259244879331938925143014431488635252724366437874702141802712286424754174951797598162531093933772708024046029028652425912112434874797404878317364682580259997737809632860143160557722236459697738869857870982308547756781808568834445404196611833859447257611721058384661943492980180884154939581533269700568975940675513953240040220315659784214936947443784598154082110443748171557676558299300252057475022409541083454882202785077569281268346332901357829843950754331120530978456454396022570647840977328115888711408099894489014427119253061839770890965114853246067272044090282103668762164047374624856119676063310166566519499552342907590495696658359542582469176737197423550084705962160477441546453931948920780829433665262356431973422034925001341330921812806939990688094288773216182971976433480031438271163051341645350474631300965486818841553843112688792803367397276204832936049162335586140151875524537720425345701193713093955432559579831822084761702059241698184717469616732582600658006352069963017377661059372648121969448644394344799369193952197519795756182552461838014896498816263546256621347748100920475049252091842372001283217811864786225692344297842649982716736752004086642881662614773154743879410328420184057019873899911520017723788801=
2678145490787694710138406683675886762424440548647327525594133873038347266950777818028529804877891353347244255046176220880989519574806598935727647635506939520211209794328712328126947740602255036264392628020291100698432900022333877728824270241063030019536831205264726059774673235680796770108334187808344470141093691232926021244583649747591446066921535333854157441330339217364515328375889937313870826987520723914810358707312468857074455945610038118763873992681688857200178452843740327143990247797893489008808544535536081089994800692174759199578596435124153437689121057209523619989593900355037400039597165241729693472001589594642879166693443994939359639600558001937547209387175085119128575833396037478944824322315197771750730768383267287661855880237549141571520374996029107650341071074081501632143441365461865431362023790463469688071768208320226561675630348708531708110373889241713511809029065048200924851629507265095151843687852114948736130517024578482059771284515915597919026074110811882700307150650858080695566672584075215926450360584738705106755945308199980660478183563586945902705730231409948938478910176292179410952310592864745025373902249844607078729230098512959498522851990040833671698873183076996740726479481352429756295966452788332789259316653805673821716832204368483794501474641036177256005810416507649770210480747056764697918800240201155395628561684853684747063434500664449114760179367086926249813006056735202795763742271472136500817313178050955623517148960973128433455798444839070215800699075256371341531892841721456473301085595261371522078416420399702683504171019191363372883472415693921509069484448792009627325245658854979159002549542769741504596589556474585723101403486046952706847309188488390899096649210853675228464611999630360164703837131620319658277117300208326944026347808645954842782309633205645471959842390075986572806483755223497552549948718545978420793425036666212191832327909389117021539426917904222971515424022606157676379417252939026404363841301595348953340657745965591468370831371449860774296757556463049237248472613472436666799615694672489600751763956185893123579218797539971253828850163437053164723845196089466298000486042246621634263064752906475198879616484926366053597071510886820878425907736453843197228282179943365206039514850477377542684361730162273246709577442085159313947668552462343596819299335060863266863059421286080919061657175757802930378698062290163092494909661982639303946271889619023417245433500782685534406291391527022657608608130680134939380126048353657648559735671562230714451258764762350451448379438849319710473631625533527602085050858633346936315115309333355986556546113134787213610042970405680162084678021281774169131725296977361816657904233850711837826724976507876061043779177845550646612327663283839673950405472039432309339110648301347672597370034346896334064135099613033528785924976781865447506814375627647103020761819104412269362847848884053177378762432543285984193091289854949394023586451139393716370633759317698908834326333339634557238526607966375935960004339535161203546369910853171524516945554862019134684985868547068709986010719120259421723270478586992153989283736650948010894951434857207445141886625290777550599700738909777829412358941157674866550887608199469723859806486384262574182811908513849905040209776132986875560077482527819093584150609347560543627976011009349905362597935257895287412087233810106693141683912683308201407373637490835862452911394718399632093441745957478079754723679119343225931665785380948807114301164623717144211285944154289093317610519159281033583963015810556464180819928345256832572962092994993950655913067768151113345566231088759030148164710287289335782462899525700500822021472132532771242198844498579102733028256523810973405350508253183399668290339844052874956694050028526577775764032598023622192221226501334606994447870277619118208162133562541678250491647671042612088902952091163094215645902682086024337098910110924115381788866213335441814530141911754446270296630426675020592640816713810936850961517475097707179713115856513919631998747192606018612535436009162735908155778165736923393260822217415131632296810207091918499370220533980666393617256227781299273913099896641458499949922475383775878771011361417556799406151773618626138749998464514570482965286184387350245762317271666329142667987131139265167425606863654107927682419958167046956962340419295394058625063862272314570914511355913547470055072878835349142049813368019960713974852351833144227544851625677753419141348585495260230041111323576432417502998832485027071744397105338790364666312325483218209150368759120749671419554589928540715813531144241705501211397506662448276056294585639532800634727428900861538486753011006379264618338782036690340859441153926551954112364946638768223012718907190897165613382555036872673785444132692292217184974818914501886689736449912131900762592363447945036085692999163815947845753538999001633767986447907729462453017601有4888位,用时5.391998秒(这个是结合模仿手工计算的分治法乘法程序结果,只是把其中的减法可调用程序改成了8位一组,提高了速度)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-3 00:14 | 显示全部楼层
下面把改进后的代码发一下:

Private Sub Command1_Click()
Dim a, B
Dim ja(), jb()
a = Trim(Text1): B = Trim(Text2): a3 = a: b3 = B
ts = Timer
If Len(a) < Len(B) Then
a = String(Len(B) - Len(a), "0") & a
B = B
Else
a = a
B = String(Len(a) - Len(B), "0") & B
End If
x = Len(a) \ 300: Y = x + 2: x11 = x
sb = Y * 2
a = String(Val(sb * 300 - Len(a)), "0") & a
B = String(Val(sb * 300 - Len(B)), "0") & B
x = sb / 2
ReDim ja(0 To x - 1): ReDim jb(-x + 1 To x - 1)
For I = 0 To x - 1
ja(I) = Mid(a, Len(a) - 600 * I - 599, 600)
jb(I) = Mid(B, Len(B) - 600 * I - 599, 600)
'倒序输出,减少加法计算量,提高速度
Next
For i0 = -1 To -x + 1 Step -1
jb(i0) = String(600, "0")
Next

jw2 = 0: jw3 = 0
For i1 = 0 To x - 1

d3 = ""
   For i2 = 0 To x - 1
a1 = Mid(ja(i2), 1, 300): a2 = Mid(ja(i2), 301, 300)
B1 = Mid(jb(i1 - i2), 1, 300): b2 = Mid(jb(i1 - i2), 301, 300)
C1 = MbC(Trim(a1), Trim(B1)): C2 = MbC(Trim(a2), Trim(b2))
c3 = MPC1(Trim(a1), Trim(a2)): c4 = MPC1(Trim(B1), Trim(b2))
c5 = MbC(Trim(c3), Trim(c4))
D1 = MPC(Trim(c5), Trim(C1)): D1 = MPC(Trim(D1), Trim(C2))
D2 = MPC1(Trim(C1) & String(600, "0"), Trim(D1) & String(300, "0"))
D2 = MPC1(Trim(D2), Trim(C2))
d3 = MPC1(Trim(D2), Trim(d3))

  Next
  d3 = MPC1(Trim(d3), Trim(jw3))
  d5 = d3
  If Len(d3) <= 600 Then
  jw3 = 0
  Else
  jw3 = Left(d3, Len(d3) - 600)
  End If
  d3 = Right(d3, 600)

d4 = Trim(d3) & Trim(d4)
Next

d4 = Trim(jw3) & Trim(d4)
d4 = qqdl(Trim(d4))
d10 = Mid(d4, 1, 88)
Text3 = d4 & "有" & Len(d4) & "位,用时" & Timer - ts & "秒"
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""

End Sub

Public Function MbC(D1 As String, D2 As String) As String
Dim x, Y ';两数长度
x = Len(D1) \ 4: Y = Len(D2) \ 4
d3 = String(4 * x + 4 - Len(D1), "0") & D1
d4 = String(4 * Y + 4 - Len(D2), "0") & D2
x = x + 1: Y = Y + 1
Dim a() As String
ReDim a(4 To 4 * x + 4 * Y, 4 To 4 * Y)
Dim I, J, C1, C2, CJ, jw, s, t
For J = 4 * Y To 4 Step -4 ';D2
jw = 0 ';进位清0
C2 = Mid(d4, J - 3, 4) ';每位数
For I = 4 * x To 4 Step -4 ';D1
C1 = Mid(d3, I - 3, 4) ';每位数
CJ = Val(C1) * Val(C2) + jw ';计算乘积
c = I + J: r = 4 * Y + 4 - J
a(c, r) = String(4 - Len(CJ Mod 10000), "0") & CJ Mod 10000 ';本位
jw = CJ \ 10000 ';进位
Next
a(c - 4, r) = jw
Next
Dim B() As String
ReDim B(1 To x + Y)
jw = 0
For s = x + Y To 1 Step -1
Bit = jw
For t = 1 To Y
Bit = Bit + Val(a(4 * s, 4 * t))
Next
B(s) = String(4 - Len(Bit Mod 10000), "0") & Bit Mod 10000
jw = Bit \ 10000
Next
If B(1) > 0 Then
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6) & B(1)
Else
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6)
End If
For s = 2 To x + Y
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6) & B(s)
Next
End Function

'该程序已经做了修改,是模仿手工计算的程序,采用4位一组,在位数少于5000的时候,此程序居然比快速傅里叶变换的乘法还快!

Public Function MPC1(D1 As String, D2 As String) As String 'jiafa
  Dim x, Y, jw '两数长度
If qqdl(D1) = "0" Then
MPC1 = D2
ElseIf qqdl(D2) = "0" Then
MPC1 = D1
Else
If Len(D1) >= Len(D2) Then
  d4 = String(Len(D1) - Len(D2), "0") & D2
  d3 = D1
  Else
  d4 = D2
  d3 = String(Len(D2) - Len(D1), "0") & D1
  End If
  x = Len(d3) \ 8: Y = Len(d4) \ 8
  If 8 * x < Len(d3) Then
  d3 = String(8 * x + 8 - Len(d3), "0") & d3
  d4 = String(8 * Y + 8 - Len(d4), "0") & d4
  x = x + 1: Y = Y + 1
  Else
  x = x: Y = Y
  d3 = d3: d4 = d4
  End If
  Dim a() As String, B1() As String, C1() As String, E1() As String
  ReDim a(1 To x)
  ReDim B1(1 To Y)
  ReDim C1(1 To x)
  ReDim E1(1 To x)
  Dim I, J, C2, CJ
  For J = Y To 1 Step -1 'D2
  jw = 0 '进位清0
  B1(J) = Mid$(d4, J * 8 - 7, 8) '每位数
For I = x To 1 Step -1  'D1
     a(I) = Mid$(d3, I * 8 - 7, 8) '每位数
   C1(I) = Val(a(I)) + Val(B1(I)) + Val(jw) '计算jia
   If Len(C1(I)) < 8 Then
   C1(I) = String(8 - Len(C1(I)), "0") & C1(I)
   Else
   C1(I) = C1(I)
   End If
     jw = Left(C1(I), Len(C1(I)) - 8)
     E1(I) = Right(C1(I), 8)
    Next
    Next
    For r = 1 To x
    If jw = 0 Then
    MPC1 = MPC1 & E1(r)
    Else
    jc = jc & E1(r)
    MPC1 = jw & jc
    End If
    Next
   MPC1 = qqdl(Trim(MPC1))
   End If
  End Function
  
  Public Function MPC(D1 As String, D2 As String) As String ';jianfaqi
  Dim x, Y ';两数长度
  If qqdl(D2) = "0" Then
  MPC = D1
  Else
If Len(D1) >= Len(D2) Then
  d4 = String(Len(D1) - Len(D2), "0") & D2
  d3 = D1
  Else
  d4 = D2
  d3 = String(Len(D2) - Len(D1), "0") & D1
  End If
  x = Len(d3) \ 8: Y = Len(d4) \ 8
  d3 = String(8 * x + 8 - Len(d3), "0") & d3
  d4 = String(8 * Y + 8 - Len(d4), "0") & d4
  x = x + 1: Y = Y + 1
  
  Dim a() As String, B1() As String, C1() As String, E1() As String
  ReDim a(1 To x)
  ReDim B1(1 To Y)
  ReDim C1(1 To x)
  ReDim E1(1 To x)
  Dim I, J, C2, CJ, jw
  For J = Y To 1 Step -1 ';D2
  jw = 1 ';yu jie weichuzhi
  B1(J) = Mid(d4, J * 8 - 7, 8) ';每位数
For I = x To 1 Step -1  ';D1
     a(I) = Mid(d3, I * 8 - 7, 8) ';每位数
   C1(I) = Val(1 & a(I)) - Val(B1(I)) - Val(1) + Val(jw) ';计算jia
   If Len(C1(I)) <= 8 Then
   jw = 0
   C1(I) = String(8 - Len(C1(I)), "0") & C1(I)
   Else
     jw = Left(C1(I), Len(C1(I)) - 8)
     End If
     E1(I) = Right(C1(I), 8)
     If Len(E1(I)) < 8 Then
     E1(I) = String(8 - Len(E1(I)), "0") & E1(I)
     Else
     E1(I) = E1(I)
     End If
     
    Next
    Next
    For r = 1 To x
    MPC = MPC & E1(r)
    If Len(MPC) > Len(D1) Then
    MPC = Mid(MPC, Len(MPC) - Len(D1) + 1)
    Else
    MPC = MPC
    End If
    For I = 1 To Len(MPC)
      If Not Mid(MPC, I, 1) = "0" Then
          Exit For
      End If
  Next
  strTmp = Mid(MPC, I)
    If Len(strTmp) = 0 Then
    MPC = "0"
    Else
  MPC = strTmp
  End If
    Next
   End If
   
  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-3 00:24 | 显示全部楼层
51444229357009705498695689284160971250193663383685210722150319744748775359122621528344215567083355670451907707693695837668324532850937176166588968634971139183302944833231893556295527896594077197129683597374136482318846544941701249766624000228057981356208443093502034625140604633339848200752173361946073443933346789602235781489339265452071638593776798421165371350248039954188944931286347716381898468113203126395308096792045894764315383795943237773890910465023815013059495056496724871504126056937676152194017082586564255521359261172753102346344494396469595605609421590317944043262260210909685857159849340378368552043197433615054904807889517283559504278373784460368569113363131710769835820089387297714801594555823592854988704942365609400006675160359031426873189564916688157908871243159770851740287846140780388606189695088738739890281656349398834057714656014963811425778390967293708624696915124185083358253535415644842673421215970474230001345828538569798140378601982017699635604641896116818157526044389838198605640572986233402266712761883020099586847825852569572633701763853682554585791118171276290617527340763544892267893370992480349897757098894560281081444642200626464175280985766718573874535680797829930258859640467605975042123111209918827618958945189505091121483858392668384880612255585916669716284514087584598182477078462206558057506025592975910027871273238862247532142535304676640617802030742222960345363855404313399047401003487305799083062451448366617957439158876389882006128158868398932966157003013761952381180690259470099567236607352405809832062578837136250716574574579522256441099557123545025010455224534286356038287679467507270968220021752586057851958248281269629815734877522064508505836721271069799255388491881486092874373981729570391000600273130647608003884599134232877090354958661859302013690470784659120935109719008283905031446377686879466478045757200145506558765235925036276576557385932514483699842243149208969282746209709419000514005516153201916481898006122396813081056743478375585046327305139099481259493354791535353470596487135876104084480625694746373732139586666314758175807030769874378033442682310307356160417978581128218551702424951416328358067700064372855643925169324018021327979713630891489119622752405679286914020988030448289607684851348500009160752114318891422323287600744067214121279440814680222046223856018417356144265724960183154333728716795115561038777021231935282986402700568064230483785799261322243714775230452755725527745146038608379279371001059967865321588174151914448536764775571037973578615327517787408788110985059461002169522785318617192307181693912992506307237500768953476768331681769333002572457840566000897380416071260754878761637173736498974911969752452488135860414907554677006408084497006257159827526348595849150261985348894347311347517189966140266360964227057248211214217659928629919303435391331416005120712207885720558321487799867161206930119103421771539467972103190393682250678522174960152378558439347627175162302619603705648848836071399024952529324687084982408118133017688448503109968656956645896946048480192314682432260264700576584216400878957654828825043888501929204984177904045285658372920051397094163047427295220711030006037232321404778543967047068762469285923373134681085248777362783958346205544202145418889769398157784788073149611548376761403141486538737770037141788493712960577959363480197591519111672946073730752057180868229313890208584096158682612983816343504413873052032480697167353489552278817781586058680359059156908344548036320135631306944489774771528702304735014143703760557177453543349547306529570340616768780151482760598479170615193602006664327138648948903916355739633941308270162516652059915050276438874381771645536407119546307308602110808277470379413233095030335295424468989074162174390506430440009184822224831604762135197176296894482438955676023632858283866605177371220933941389487447042997313276813513817803438354917453446883162229251748984107795718851147870601783924833259787594255023342306507456912443550071030208718860669407813729848666895788392476265844821715329237813888850815099292377748527880672005186227029038313166577070820370953922393125548815784762480716999231112838148069211991950691916501447592610394499065364322013748152127893784838593797607394388436881471937572499635297772411428360587893831743999745591711694693866191043576499340546602519838932679411958977012716186665359051582479709075417158528580483757833679410253083165945296785222695885577370900864071489012430843034944645603735379195280025613435712355924314863811743827795636679833650340711437233826412874652976815458887323384054546632106872673123116398730467840212063933927344401665367273527255946758376081228079255930764904350921454271841369617097419767513579178639155380978815461543065893696532971327449461004174429220963114041363358314967725204392567409853114511718894307643631546965958312484908065383823412217473440414293824284526555873270491143183361295864967579855246996091265048027505060900834170125556562162551537434196084600631467998911190053595844510705466496573548607039396055020292262150204441825829591438698284355118563291933426381855788871060610209574041839838563877291133446841765141550790969420019931335118024135668252727429127277327010080630091503155817732502505948089862964510448572293708413555811826477198946284299249803359083101179231919079840587424089773469686969520331879450331982721475249327999487251751706346378904072199908362843325220090261748886455160894534618900524452334077230251228488177710026608285448160668895830056429900594111638920726702786607673617753884316181608986919842867230781499147892959393862062647527840625613367260491383202053809699049034845359408558078426790922884585937878706447640430037617295337479822942307036309880435190016603292587486670770400968414436062177558340485732399593574684408579852251099386440664715996472709503190326196112431776618496342463773705376557608878531398366891436246005211525105666657143754195682576243436684531565851133669499217182871786042547448128547212489534533546411302123733919227701350343114374027823388734105029451217607019122130451356635147739804673043366197888574741979984899062514977342811387470137829504434138089419313384856038171340813037212988564310965985781906223971603099448077768724135527428122903252985599516402675987118370871380711527621573873393516573976063479848524423462759835964891140012324519173599725428642361361068172851167497848080021674536204331012403670169210980245848637217188648225885977646348516324041545657194185298974033231835117142779160262801229836405621105156783013717293536138550388508105732780981390645713029332581014063684679894314776432826464392770191976441860111883369553100497643960158535828927475846412468513508489123966058178757981628231867323711011231048794489345211468916742191198636966985422920179595657981341141062164406674532648463185396609770870332096252014035092123588963978186735580042580980613737391270774574213143757755751883697069852771105226235745249016819851687618696867463252231114439968978315083108484001519759452354526279002448467845301138631933065317711752431130991417899009156710209089292811908604830563989259580154993086863603158178515104290720648309883842154082224320839725606296732000727693290524485776120935752414418878472294890371499306931907333324291401972007455632345852614250072853013012945436065975597114539565733294131761811647833005562233059897155413908820498684050997196891056374240379032318837109547689273707681611089403544408082721706473290499334235612885568011460256849727085076206079416052803280267260901684609292031897483601056570760086223345132418690406912044967840699532837777220337619001021407001693004319410408897824474243886961978574987768049128885543011697013044774759574717419644216280288616892251878750272403720502483146688505324945767567603316888720316011709842454310651905842456995717854658757793940654403097119500347184685565541435883956074212634458392169744262789777168587077633132878974370677442014549387267164340953922822251829239556879502763379039928986242814762702287157067194761335256675433555182851552352559991526456925347432747802313921075996819327317045132012617429811514074091399778997352474383606992439461610335483557936315809083490277649333569801959919272603011494193988786624013003967741881377298599206260756300231164329090886437111987872720242305957228698555912625065064190559304307358760347745521482896132605885281933616758212828592849681187675942076108113302381355104587574017181942465845495743839422229373653337202363728823896447570459309176646022547055965908445087430566732527561871546926404773102702246224432048449625109060660865222942173680372653073214268518784549567040501706919286193522820203414453082285837784675002393243795648411455249436388354108402298751663579641903923191755243458068049821399981406775187846920082329567089639393166189818386498916654186263236746984358665027637042973344271992431897184463116294348226018092986777330214101355286966888649547882946125231255079867781801266501967591409148337945555826175412217168447872930279389750371330475222596227129424190226136945764125273213822292916011181314116041792889396828595293322573584664017942843601763015910665616185100397070932698993189981899381369135145511919573824148872130362626325230263479916318230804739942853734691756919928756697652976490810473211849549241540762725813953930723190981637783368720629485864681219674862805281147123618369648219443914697265568489851644682338839594389798528686503462752556326463179413487639267322415342021661782198643045709866905617952560578490556995925761572422791790301321190815276469688285495731079969527242665460676072017966646761444343077050015427344485571444722043920393227173574788963017083103163316444721989304354943010481162291435220957200362001334215839785830443382672730119778260821583383111451900319444250424299632477082943256751087979956039788474826051431864034319164099434231538605886844512806083616770766960087352987672015999042087729725781568286209406499243012959626824729965732513083229107853316988026294855503591736817573411617977947178208066444763813946497537177960407804717683672825555900801570001045932685213150713168976874486410808232884111284116849192046563587472241672721878241374262778692543921036556437946028395526409981294253566007077328459635350092391027510311495022125935258197839081781965238971815941968757378341840909860278122918583537172655464084578030518848395326814814456132883655661283681249889602236359262040400558570790171815660578083313993394461197281232297422713635025375641835990588962917099757664795913739285794804584291009040868823532558841628119620925183471868549875466869188177505153666816394414723340641917940584361952079149498472812583260283068474480931678707056484324850617712080359691709776941095013091829445946057432761370542300314779715321334444713774581590337903939304335909307068426671584496871726571881716132948915253704707757591533442524766019672022390979146952076988143810119460236213746430762268682680881266193571871275412676250005946379188555706192188797559909736689205175849641808468634255402172023571037451793254632295935051586694477304538469945188289019295200159220308693052779069996610410807643313071567412266891845626199284108038066722454050607460343612828334672893446961781157291360507072467245161203248910944820605505200092458974605093030860910582001473119924624666059366859402896927689627338088946903630539201357537667544050090484167449839531197820233786114078819811021106435602077046525168822817484701691857941842610951041540933624358100404417526666393254423241305531332656040937125802579759144773272698768734115898512979467030085752261239459124785925303945800057294337283034726565387490196322782696275866332909498542885176995360658669350521506241872044343484849039111278156718242956572497097964273494066835685213469554652278302245504686473612394277905766130772765098235866298788034884139914359215975798397470111738433639102076952796435209264028021537229892074058188314207373272605636038651334696444286919565721890569881338463783989882911019234792486535699025646311275122274411175404155342249234136558802674731197305641190947858045969993105751983395792065828920796822805820210093174577065491814597082131393031622787491679856332477759009694178317375318368821390264654174039670932709831161255202873640489281967716308473047243229957004765412706536236472670869025902543540633101208028807552552098389091790435906088326534470239980054716807416750322521229220241568933467553431576752163460745670475952435493987314007198258850504885411059106007738740875539832452249589294006659624780916723181534511714197062648856491091688501221471717806381749888298525407248789423897932623271498241668092001196586363981364139438871535239207176214827065069539651733601100753810180878379274361295578405732661254466632895143727844665840866498240003655962932105277876459272466979831529282048840956209056998769042430627753436065929805338741393335042911200731019721288387249286505188391256813428739747714333379066876823883520130766201876860791210671538076160347755324700164074813292068568024238519482741252954199964042782225233360037022137076218722706203773213869098586993370170155683791146032975636525838513708976569134302322432642077565826389896215245438300187570310860480000533906713082013024652830860757006343956987254278284858371619486860324713636557288734182121660245924031628622394404845468842376014364491369333932732440011789862081204289182566535179044033371514444457023620546865608494829671941096306770681862607086197624365511249841742601689637943827647739753192488830108748993946646301337601457492499972685876684793341277398602275214653549915139511130070900252357536321474687124983694348062078037402632623766476692775678286881806982898247107838472527399024338405174424815001165897166650159739515463438185108038327958294258499979123263522591261654749484216293043245130713211428672161827666045403900761515335614916042818935205318832501058428630546098253028977703603252002538386142310863661394203801021650102355428530278355411821233551959475904697750988996697656852598884502119976493604708637198826791035572233637351986210864977795898608556238023618301984537915608930604362302527908670790232196653470383452730966437820907710683243209361014219861979941950841987346107743208561925389719631737184861993943843888754529081140961004120569137972767939179238123227568371028391438266058282117268996237434183830334056161593410007851958385930853757794469184653666509613683966762973275802915748207536233835944456492079672432074637652862475003545406240942715300755523944206787863863868182421896839656869884217377578751607363166640679526547616649957166113180795819300698729245904023050382738288763601955657437404388004070623572376563051583388185752588363242342948072258707770222618411368623353933153416998674556673828083953385859553887650200322341613752381777915208516249775540573681407970842264880494895043357543980075647268121681730910097533515842996052774514769117001511705236715668019747243088644998257802328991106887493129666979551568128160024931577019249231036351291752174562619839669581224559705587165708372744726224186073126971717311245980502449125273456503801187274837306224135490894291619763228475986831005594442019148473818854081438056466447549945298051927502134555522991323435490985690831389052274735020726873487488936336741311539022782075508436837487924255181698061213905084162235118210017590721240114251909624811608300914878701408771328813975283269700679765515272835500581808493660164914406678948764808907820590793942802060935667588289909747897748137923192813443141480658391350876193378672782928937239541344428644252704346833459652953893206406021977446066148428686466508087550385252943740960874819825685873233082410626669803645777952677637448050496360102884890873362567118473457647334943807551216752659414686723198905670826134278959453835743722477363868599024571425315726635962538691827224412670447061058393874398485976231917079164327494510859626266588302051504090008261830241447676880203477502787354055343155909715421429375559706133130062628561848592810462408089869178098913629053121350338706001334665817189902339046551719256269486698716494374181056432863341577867140583392107410719128329725480841263789204392440976393893147168046831929228725690454484457819357719649568902018996210157275940520779431450165038526154612104633755692499830669045602271953235366951774644612761172006231769432808233696581070645788729238857402139382484239571166108453915459654362102096518732505237161776583876207193384586878498200605001469543462091485286217093489852123877116301695514263030360771288829090506779042608299705238648514904644323593225819202326098687550889491884085512718311228273159016624975588461535331385403944334397175727312393731559924877557033314268586667576404657042621504624638607780996250155298180711760908316799169764459037945988617689968900369456126826878874149283922399651015788901381482653828757633905291968811496239411234225169841339242923224920997069592927984613452201769764034361265590100376142758102242622751137816624390201799073002914764480438293862303619444424411900873478825309592215448378122673841321459836000301987706900055719812275088409764751071712511442535378273186891677663024136055784679879071700250103941840442827882641509903924818054983813117941436780546475991140251422964511376459380443852419759687830723215798218632573151723785873786668931387512213704069753751304404757469294652741201772267969380591573730352006518268264387324760748171401960363123143642534623196505119663743478694232226992854384052020587978193751769297437110799401666654270086352480363252583084900758706469183711968216421628482651660307315276372014948429733174841247185477453980848109772474843390892942983417487561937787738211071008447243561370883755652297106343676574456572441499153044391296359081444755171879623563709723059551688149772138242004430113752660263595301467681684666765111293583112596306703249487247014559398847582739773923562193048979815510679889238537948008801349956448663808114950270788702178103140036903038677125953796297346185669646277919571450148386833367083965328745661813784675396536308123206255891676600557317868286970806528762125164098195448405530607155298182670078514292122809944389633521146848690175777654805756158929494558044691813620191444798686702502416738793016663859592145359839628493867351786428502743472570771842556696378878472341050391089226772333872594326009783260166152072708644780268603582214015792114037576904183214818892694863534846282524092493194220528298002349242488700100084240660739453383072745053167243114518692729966302221045624162785240731536939992864261703562670127208816099398026935794227709192951849703149047115596988121183064038969430213752390079811597488253736354183223115731539041783376124701639330021544747985885271784834839607317621722963550990654667932700528378860171449142719544032621794550522980007985794164463018892770934144461839455108854280165247825770088985804072882008966279297216038293653289676057511596687371673495287395608114205035151184670802174286673891799830707522027275731687638894711538425640185422616776596308786129781753251068811069644860389343200897476243854920541316146283393481744301776367207189490814060219073419415657802608088338315148976176160344214995925269677377836011427268405733942592393857163978388774692466472603273657739324678810087878647853020613664828824493174871401222712465054920359567267915297137560103994397010364062156242658159355701818701158670419430421561539793933721747077276577835553268786089595585704020376187707801620157668465506675415808792836465976733317453992349443769780601397893341502030028303188671864249117064284001630914762068848485387551204510364030708525634372360381675401963161254572822349974630401有19550位,用时70.06598秒(这个没有前面那个快速傅里叶变换的乘法程序快,快速傅里叶变换还是无可替代的)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-5 07:56 | 显示全部楼层
如下是快速程序和慢速程序的运行结果的比较:
‘5000与5500之间的素数打头有0组差为2和3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376和2的4生素数对用时868.4063秒) 快的
‘5000与5500之间的素数打头有0组差为2和3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376和2的4生素数对:(用时1694.301秒)慢的
‘5500与6000之间的素数打头有0组差为2和3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376和2的4生素数对用时1101.531秒) 快的
‘5500与6000之间的素数打头有0组差为2和3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376和2的4生素数对:(用时2148.318秒)慢的
‘314261与314263之间的素数打头有1组差为2和618970019642690137449562114和2的4生素数对:(用时1.310547秒)快的
/314261/314263/618970019642690137449876377/618970019642690137449876379
‘314261与314263之间的素数打头有1组差为2和618970019642690137449562114和2的4生素数对用时1.408203秒)慢的
/314261/314263/618970019642690137449876377/618970019642690137449876379
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 19:09 , Processed in 0.096679 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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