VB大数乘法运算速度问下大家有没有写这个的,大家的运算速度是多少,我好做个比较,我的万位乘万位的运算速度,在普通家用的电
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/23 22:30:11
VB大数乘法运算速度
问下大家有没有写这个的,大家的运算速度是多少,我好做个比较,我的万位乘万位的运算速度,在普通家用的电脑上的速度是2000毫秒(2秒)到4000毫秒(4秒)之间,
万位乘以万位,就是一个(一万位)的随机巨数乘以一个(一万位)的随机巨数,产生一个(两万位)的巨数的意思!希望大家明白,不要误解,我并没有打错字!另,2万位乘以2万位的运算时间在8到15秒之间!10万位乘10万位在4到6分钟时间,我的算法是可以(小数以及负数),并且在文本框里以精确的逐位方式显示的!
问下大家有没有写这个的,大家的运算速度是多少,我好做个比较,我的万位乘万位的运算速度,在普通家用的电脑上的速度是2000毫秒(2秒)到4000毫秒(4秒)之间,
万位乘以万位,就是一个(一万位)的随机巨数乘以一个(一万位)的随机巨数,产生一个(两万位)的巨数的意思!希望大家明白,不要误解,我并没有打错字!另,2万位乘以2万位的运算时间在8到15秒之间!10万位乘10万位在4到6分钟时间,我的算法是可以(小数以及负数),并且在文本框里以精确的逐位方式显示的!
![VB大数乘法运算速度问下大家有没有写这个的,大家的运算速度是多少,我好做个比较,我的万位乘万位的运算速度,在普通家用的电](/uploads/image/z/17200899-27-9.jpg?t=VB%E5%A4%A7%E6%95%B0%E4%B9%98%E6%B3%95%E8%BF%90%E7%AE%97%E9%80%9F%E5%BA%A6%E9%97%AE%E4%B8%8B%E5%A4%A7%E5%AE%B6%E6%9C%89%E6%B2%A1%E6%9C%89%E5%86%99%E8%BF%99%E4%B8%AA%E7%9A%84%2C%E5%A4%A7%E5%AE%B6%E7%9A%84%E8%BF%90%E7%AE%97%E9%80%9F%E5%BA%A6%E6%98%AF%E5%A4%9A%E5%B0%91%2C%E6%88%91%E5%A5%BD%E5%81%9A%E4%B8%AA%E6%AF%94%E8%BE%83%2C%E6%88%91%E7%9A%84%E4%B8%87%E4%BD%8D%E4%B9%98%E4%B8%87%E4%BD%8D%E7%9A%84%E8%BF%90%E7%AE%97%E9%80%9F%E5%BA%A6%2C%E5%9C%A8%E6%99%AE%E9%80%9A%E5%AE%B6%E7%94%A8%E7%9A%84%E7%94%B5)
首先时间复杂度应该是o(N^2)吧,所以就看你的运算位数了.
如果是10000位的话直接算应该要是10秒级别的,我测出来的大致时间是20秒.优化成每4位存成一个数计算后,运算量瞬间降下来,相当于N=2500了,1秒就能出结果.
然后10万位的优化之后我需要23秒.不知道你的方法是不是比我的要好……
程序如下:
Private Sub Form_Load()
Dim a(100000) As Long, b(100000) As Long, c(200000) As Long, x&, n&, s&, i&, j&, k&, m&
Randomize
o = 4 ' 优化位数,即数组中每项保存几位数,最大可到4
n = 100000 ' 巨数的位数
s = 10 ^ o
t = n \ o - 1 ' 相当于时间复杂度中的N
For i = 0 To t
a(i) = Int(Rnd * 10)
b(i) = Int(Rnd * 10)
Next
m = -1 ' c的有效位数
t1 = Now() ' 开始计算
For i = 0 To t
x = 0
For j = 0 To t
x = x + a(i) * b(j)
k = i
While x > 0
While k > m
m = m + 1
c(m) = 0
Wend
c(k) = (c(k) + x) Mod s
x = x \ s
k = k + 1
Wend
Next
Next
t2 = Now() ' 完成计算
MsgBox "用时:" & Str(Second(t2 - t1)) & "s"
End Sub
我这个都已经存好到数组了,要显示就把它输出成字符串就好了,而且小数和负数的话只要记个符号和小数点的位置,都不影响计算时间的啊.
输出可以用Format(a(i),"0000").
你问题里问的不是计算时间么?我就懒得加那些东西了.
如果是10000位的话直接算应该要是10秒级别的,我测出来的大致时间是20秒.优化成每4位存成一个数计算后,运算量瞬间降下来,相当于N=2500了,1秒就能出结果.
然后10万位的优化之后我需要23秒.不知道你的方法是不是比我的要好……
程序如下:
Private Sub Form_Load()
Dim a(100000) As Long, b(100000) As Long, c(200000) As Long, x&, n&, s&, i&, j&, k&, m&
Randomize
o = 4 ' 优化位数,即数组中每项保存几位数,最大可到4
n = 100000 ' 巨数的位数
s = 10 ^ o
t = n \ o - 1 ' 相当于时间复杂度中的N
For i = 0 To t
a(i) = Int(Rnd * 10)
b(i) = Int(Rnd * 10)
Next
m = -1 ' c的有效位数
t1 = Now() ' 开始计算
For i = 0 To t
x = 0
For j = 0 To t
x = x + a(i) * b(j)
k = i
While x > 0
While k > m
m = m + 1
c(m) = 0
Wend
c(k) = (c(k) + x) Mod s
x = x \ s
k = k + 1
Wend
Next
Next
t2 = Now() ' 完成计算
MsgBox "用时:" & Str(Second(t2 - t1)) & "s"
End Sub
我这个都已经存好到数组了,要显示就把它输出成字符串就好了,而且小数和负数的话只要记个符号和小数点的位置,都不影响计算时间的啊.
输出可以用Format(a(i),"0000").
你问题里问的不是计算时间么?我就懒得加那些东西了.