整数拆分(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))

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