如果增加未知数,还是有优化的空间的,这个问题是可以用多项式乘法来表达的,由于多项式是一个式子,就可以看做是多项式乘方,由此可以用快速幂方法计算。
程序代码:
在未知数比较多的情况下,速度的提升还是比较明显的
和 5000 ,50 未知数 模 3 时间 6.5 秒 未优化前要运行 26.5 秒
程序代码:
Function Solaa(ByVal sum&, ByVal n&, Optional ByVal mo&) As Double
Dim i&, j&, a&, b&, xa&, xb&
If sum < n Then
Solaa = 0
Exit Function
End If
Dim s() As Double
Dim x() As Double
ReDim s(1 To sum, 0 To 1)
ReDim x(1 To sum, 0 To 1)
For i = 1 To sum
If i Mod mo Then
x(i, 1) = 1
s(i, 1) = 1
End If
Next
a = 0
b = 1
xa = 0
xb = 1
n = n - 1
Do While n > 0
If n And 1& Then
For i = 1 To sum - 1
If s(i, b) Then
For j = 1 To sum - i
If x(j, xb) Then s(i + j, a) = s(i + j, a) + s(i, b) * x(j, xb)
Next
End If
Next
a = a Xor 1&
b = b Xor 1&
For i = 1 To sum
s(i, a) = 0
Next
End If
n = n \ 2
If n = 0 Then Exit Do
For i = 1 To sum - 1
If x(i, xb) Then
For j = 1 To sum - i
If x(j, xb) Then x(i + j, xa) = x(i + j, xa) + x(i, xb) * x(j, xb)
Next
End If
Next
xa = xa Xor 1&
xb = xb Xor 1&
For i = 1 To sum
x(i, xa) = 0
Next
Loop
Solaa = s(sum, b)
End Function
在未知数比较多的情况下,速度的提升还是比较明显的
和 5000 ,50 未知数 模 3 时间 6.5 秒 未优化前要运行 26.5 秒








