整數拆分(python)

# 我們都知道有一門數學領域叫組合數學,其中整數的拆分問題是非常有名的,

# 例如 我們有1g、 2g、 3g、 4g、 5g的砝碼各一個,問能稱出多少的重量,各有多少稱法

 

# 這裏我們利用歐拉提出的母函數的概念(當然拉馬努金的公式也可以,拉馬努金是我非常喜歡的數學家), 直接帶入求解,(1+x)(1+x^2)(1+x^3)(1+x^4)(1+x^5)

 

def add_poly(L1,L2): #多項式加法,同次項係數相加

    R=[]

    if len(L1)>len(L2):#默認L2比較長

        L1,L2=L2,L1

    i=0

    while i<len(L1):

        R.append(L1[i]+L2[i])#從低次項開始對應相加

        i+=1

    R=R+L2[len(L1):len(L2)]#較長的多項式高次項直接複製

    return R


 

def multiply_poly(L1,L2):#多項式乘法

    if len(L1)>len(L2):

        L1,L2=L2,L1

    zero=[];R=[]

    for i in L1:

        T=zero[:]#存儲中間產生的結果多項式,每次更新結果多項式的列表長度

        for j in L2:#一個單項式乘以多項式的每一項

            T.append(i*j)

        R=add_poly(R,T)

        zero=zero+[0]# 每一個新的多形式都要比前一個多項式次數高1,列表長度增加,所以多補一個0

    return R

 

sum_data = multiply_poly(multiply_poly(multiply_poly(multiply_poly([1, 1, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0]),[1, 0, 0, 1, 0, 0]), [1, 0, 0, 0, 1, 0]), [1, 0, 0, 0, 0, 1])

 

print(sum(sum_data))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章