如果增加未知数,还是有优化的空间的,这个问题是可以用多项式乘法来表达的,由于多项式是一个式子,就可以看做是多项式乘方,由此可以用快速幂方法计算。
在未知数比较多的情况下,速度的提升还是比较明显的
和 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 秒