母函数模板

本文提供了一个母函数模板的实现代码,用于解决组合数学中的多项式乘法问题。模板通过逐项相乘的方式更新系数,实现了高效计算特定指数的系数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大佬关于母函数的介绍   http://www.cnblogs.com/hsqdboke/archive/2012/04/17/2453677.html

                                       http://www.cnblogs.com/magicsoar/p/4129414.html

贴一下模板,按自己的习惯改了一点.

母函数模板(HDU1028)

#include<iostream>
#include <cstring>
using namespace std;
#define M 1000   //M为(x的最大指数+1)
#define MAXN 130      //MAXN为最大有多少项相乘
int a[M],b[M];//a[M]中存最终项系数;b[M]中存取中间变量;
int main()
{
       
    int m,n;
    int i,j,k;
    m=MAXN;
    while(scanf("%d",&n)!=EOF) 
    {
        memset(a,0,sizeof(a);   
        //n为所求的指数的值: ";       
        //因为只求指数为n的系数的值:所以循环只到n就结束       
        for(i=0; i<=n; i++) //初始化第一个式子:(1+X+X^2+X^3+...) 所以将其系数分别存到a[n]       
        {    
            a[i]=1;  
            b[i]=0; 
        }   
        for(i=2; i<=m; i++) //从第2项式子一直到第n项式子与原来累乘项的和继续相乘       
        {        
            for(j=0; j<=n; j++) //从所累乘得到的式子中指数为0遍历到指数为n 分别与第i个多项式的每一项相乘                
                for(k=0; k+j<=n; k+=i) //第i个多项式的指数从0开始,后面的每项指数依次比前面的多i,比如当i=3时,第3项的表达式为(1+x^3+x^6+x^9+……),直到所得指数的值i+j>=n退出                
                {                   
                      b[j+k]+=a[j];//比如前面指数为1,系数为3,即a[1]=3 的一项和下一个表达式的指数为k=3的相乘,则得到的式子的系数为,b[j+k]=b[4]+=a[1],又a[1]=3,所以指数为4的系数为b[4]=3;                
                }           
            for(j=0; j<=n; j++) //  然后将中间变量b数组中的值依次赋给数组a,然后将数组b清零,继续接收乘以下一个表达式所得的值             
            {       
                    a[j]=b[j];  
                     b[j]=0;
            }
        }      
        printf("%d\n",a[n]);   // 指数为n的项的系数为:   
    }   
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值