十一、 继续优化(二)
乘法的运算次数减下来后,加法的运算次数成为最多的了,能不能用减少乘法的方法减少加法呢?
Private Sub Command1_Click()
Dim l As Integer, m As Integer, n As Integer
Dim Lf(9) As Integer, Bw As Integer
Dim S As Integer, S2 As Integer, Lf2 As Integer
For m = 0 To 9
Lf(m) = m * m * m
Next m
For l = 1 To 9
Bw = l * 100
For m = 0 To 9
S2 = Bw + m * 10
Lf2 = Lf(l) + Lf(m)
For n = 0 To 9
S = S2 + n
If Lf2 + Lf(n) = S Then Print S
Next n
Next m
Next l
End Sub
引入前两位的和(S2)和前两位数目立方和(Lf2),减少部分重复计算。
共使用循环控制4个,实际建立和撤销循环控制l:1次(执行9次);m:1+9次(执行10次和90次);n:90次(执行900次),共计101次。乘法119次、加法1980次、赋值1099次、相等判断900次,输出4次。使用变量17个(计34字节)。
与第六种算法(取消乘方)比较,乘法减少了801次,整除运算1800次、减法900次、取余900次全取消,加法增加了1980-1800=180次,赋值增加了189次,循环增加了2个层次共99次创建和撤销。总体看,应该是取得了好的效果的。