| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 984 人关注过本帖
标题:解限制条件下线性不定方程的解组数
只看楼主 加入收藏
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:31
帖 子:331
专家分:1120
注 册:2014-4-13
收藏
得分:0 
如果增加未知数,还是有优化的空间的,这个问题是可以用多项式乘法来表达的,由于多项式是一个式子,就可以看做是多项式乘方,由此可以用快速幂方法计算。
程序代码:
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 秒

收到的鲜花
  • mrexcel2022-11-25 20:36 送鲜花  5朵  
2022-11-25 19:03
快速回复:解限制条件下线性不定方程的解组数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030956 second(s), 10 queries.
Copyright©2004-2022, BCCN.NET, All Rights Reserved