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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值