# 我们都知道有一门数学领域叫组合数学,其中整数的拆分问题是非常有名的,
# 例如 我们有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
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))