VB大数乘法运算速度问下大家有没有写这个的,大家的运算速度是多少,我好做个比较,我的万位乘万位的运算速度,在普通家用的电
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 03:47:46
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分钟时间,我的算法是可以(小数以及负数),并且在文本框里以精确的逐位方式显示的!
首先时间复杂度应该是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").
你问题里问的不是计算时间么?我就懒得加那些东西了.