# 我们都知道有一门数学领域叫组合数学,其中整数的拆分问题是非常有名的,

# 例如 我们有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))