我们先来看一下一个简单的问题:
#####例1:
小明出门旅游,需要带一些食物,包括薯片,巧克力,矿泉水,汉堡,牛奶和糖果。
经过估计,他觉得带n(n<10^100)件食物比较合适,但他还有一些癖好:
.最多带 1 个汉堡
.巧克力的块数是 5 的倍数
.最多带 4 瓶矿泉水
.薯片的包数是一个偶数
.最多带 3 罐牛奶
.糖果的个数是 4 的倍数
问你小明有多少种方式来准备这次旅行所带的食物。
如果不看数据范围,那么处理本题一般的思路是首先考虑 1,3,5 三个条件,可以用枚举来解决,之后问题转化成了一个不定方程非负整数解的问题:
5 x + 2 y + 4 z = m 5x+2y+4z=m 5x+2y+4z=m
首先想到的方法是用 f ( m ) f(m) f(m)表示 5 x + 2 y + 4 z = m 5x+2y+4z=m 5x+2y+4z=m非负整数解的个数,把 3 个变量分开来考虑做 3 次时间复杂为 O ( n ) O(n) O(n)的递推。
但是,天哪,n太大了,即使是 O ( n ) O(n) O(n)也会炸掉,那么怎么做呢?
我们新定义一个无穷序列的幂级数,一般来说母函数有形式:
G ( x ) = g 0 + g 1 x + g 2 x 2 + . . . = ∑ n ≥ 0 g n x n G(x)=g_0+g_1x+g_2x^2+...=\sum_{n \ge0}g_nx^n G(x)=g0​+g1​x+g2​x2+...=∑n≥0​gn​xn
我们称 G ( x ) G(x) G(x)是序列 < g 0 , g 1 , g 2 , . . . > <g_0,g_1,g_2,...> <g0​,g1​,g2​,...>的母函数
那么这样做有什么好处呢?
我们这样做可以将件数的意义转到x的幂上面,我们可以用幂代表件数,系数代表方案数
我们可以在做系数乘法的同时做幂的加法,方案数可以用两种不重合的方案相乘得到,但是物品数是相加,由于 a x A ∗ b x B = a b X A + B ax^A*bx^B=abX^{A+B} axA∗bxB=abXA+B所以a种方案取A物品A个,b种方案取B物品B个,合起来就是ab种方案取AB物品A+B个,用 X 0 = 1 X^0=1 X0=1代表不带,那么之前的问题就可以这样考虑了:
最多带 1 个汉堡即 ( 1 + x ) (1+x) (1+x)(带或不带)
巧克力的块数是 5 的倍数即 ( 1 + x 5 + x 1 0 + . . . + x 5 i + . . . ) (1+x^5+x^10+...+x^{5i}+...) (1+x5+x10+...+x5i+...)(五的倍数)
最多带 4 瓶矿泉水即 ( 1 + x + x 2 + x 3 + x 4 ) (1+x+x^2+x^3+x^4) (1+x+x2+x3+x4)
薯片的包数是一个偶数即 ( 1 + x 2 + x 4 + . . . + x 2 i + . . . ) (1+x^2+x^4+...+x^{2i}+...) (1+x2+x4+...+x2i+...)
最多带 3 罐牛奶即 ( 1 + x + x 2 + x 3 ) (1+x+x^2+x^3) (1+x+x2+x3)
糖果的个数是 4 的倍数即 ( 1 + x 4 + x 8 . . . + x 4 i + . . . ) (1+x^4+x^8...+x^{4i}+...) (1+x4+x8...+x4i+...)
但是问题出现了,我们没有办法计算无限项,即使是只算n项这个算法也并不比之前的优秀,但是我们可以用一点简单的高中知识即可知道 1 + x + x 2 + x 3 + x 4 + . . . + x n = 1 − x n + 1 1 − x 1+x+x^2+x^3+x^4+...+x^n=\frac{1-x^{n+1}}{1-x} 1+x+x2+x3+x4+...+xn=1−x1−xn+1​这里的x没有说多少,又由于当n趋向于正无穷时 ∣ x ∣ < 1 |x|<1 ∣x∣<1的数,它的 lim ⁡ n → + ∞ X n → 0 \lim_{n\to +∞}X^{n}\to0 limn→+∞​Xn→0因此,我们可以在这里耍流氓假设 ∣ x ∣ < 1 |x|<1 ∣x∣<1,那么 1 + x + x 2 + x 3 + x 4 + . . . = 1 1 − x 1+x+x^2+x^3+x^4+...=\frac{1}{1-x} 1+x+x2+x3+x4+...=1−x1​因此
最多带 1 个汉堡 ( 1 + x ) (1+x) (1+x)
巧克力的块数是 5 的倍数 ( 1 + x 5 + x 1 0 + . . . + x 5 i + . . . ) = 1 1 − x 5 (1+x^5+x^10+...+x^{5i}+...)=\frac{1}{1-x^5} (1+x5+x10+...+x5i+...)=1−x51​
最多带 4 瓶矿泉水即 ( 1 + x + x 2 + x 3 + x 4 ) = 1 − x 5 1 − x (1+x+x^2+x^3+x^4)=\frac{1-x^5}{1-x} (1+x+x2+x3+x4)=1−x1−x5​
薯片的包数是一个偶数即 ( 1 + x 2 + x 4 + . . . + x 2 i + . . . ) = 1 1 − x 2 (1+x^2+x^4+...+x^{2i}+...)=\frac{1}{1-x^2} (1+x2+x4+...+x2i+...)=1−x21​
最多带 3 罐牛奶即 ( 1 + x + x 2 + x 3 ) = 1 − x 4 1 − x (1+x+x^2+x^3)=\frac{1-x^4}{1-x} (1+x+x2+x3)=1−x1−x4​
糖果的个数是 4 的倍数即 ( 1 + x 4 + x 8 . . . + x 4 i + . . . ) = 1 1 − x 4 (1+x^4+x^8...+x^{4i}+...)=\frac{1}{1-x^4} (1+x4+x8...+x4i+...)=1−x41​
乘起来得:
( 1 + x ) ∗ 1 1 − x ∗ 1 1 − x 5 ∗ 1 − x 5 1 − x ∗ 1 1 − x 2 ∗ 1 − x 4 1 − x ∗ 1 1 − x 4 (1+x)*\frac{1}{1-x}*\frac{1}{1-x^5}*\frac{1-x^5}{1-x}*\frac{1}{1-x^2}*\frac{1-x^4}{1-x}*\frac{1}{1-x^4} (1+x)∗1−x1​∗1−x51​∗1−x1−x5​∗1−x21​∗1−x1−x4​∗1−x41​
= 1 ( 1 − x ) 3 =\frac{1}{(1-x)^3} =(1−x)31​

巧了,只剩一个分母了我们来看看它等于什么,因为 1 + x + x 2 + x 3 + x 4 + . . . = 1 1 − x 1+x+x^2+x^3+x^4+...=\frac{1}{1-x} 1+x+x2+x3+x4+...=1−x1​
而 1 ( 1 − x ) 3 = 1 1 − x ∗ 1 1 − x ∗ 1 1 − x \frac{1}{(1-x)^3}=\frac{1}{1-x}*\frac{1}{1-x}*\frac{1}{1-x} (1−x)31​=1−x1​∗1−x1​∗1−x1​
这咋办?完了吗?
并不,我们可以来看看通项 G ( x ) = 1 ( 1 − x ) m = ( 1 + x + x 2 + x 3 + x 4 + . . . ) m G(x)=\frac{1}{(1-x)^m}=(1+x+x^2+x^3+x^4+...)^m G(x)=(1−x)m1​=(1+x+x2+x3+x4+...)m
很明显, G ( x ) G(x) G(x)中 x n x^n xn的系数的值等价于方程 x 1 + x 2 + x 3 + . . . + x m = n x_1+x_2+x_3+...+x_m=n x1​+x2​+x3​+...+xm​=n的非负整数解的个数,用隔板法易知系数 g n = C m + n − 1 m − 1 g_n=C_{m+n-1}^{m-1} gn​=Cm+n−1m−1​
所以上面那个问题的答案 g n = C n + 2 2 g_n=C_{n+2}^2 gn​=Cn+22​
这样我们运用母函数的方法解决了本问题,时间复杂度仅为 O ( 1 ) O(1) O(1),但是在 n 比较大的时候需要使用高精度乘法。
代码:(由于太丑了,尽作参考意义)

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=2005;
char s[MAXN];
int a[3][MAXN],b[MAXN],c[MAXN],ans[MAXN];
void cnf(int x,int y)
{memset(b,0,sizeof(b));for(int i=0;i<MAXN;i++){for(int j=0;j<MAXN;j++){b[i+j]+=a[x][i]*a[y][j];}}for(int i=0;i<MAXN;i++){b[i+1]+=b[i]/10;b[i]%=10;}for(int i=0;i<MAXN;i++){a[x][i]=b[i];}
}
int main()
{scanf("%s",s);int len=strlen(s);for(int i=0;i<len/2;i++){swap(s[i],s[len-i-1]);}for(int i=0;i<len;i++){a[2][i]=a[1][i]=a[0][i]=s[i]-'0';}a[1][0]+=1;a[2][0]+=2;for(int i=0;i<=len;i++){a[1][i+1]+=a[1][i]/10;a[1][i]%=10;a[2][i+1]+=a[2][i]/10;a[2][i]%=10;}cnf(0,1);cnf(0,2);for(int i=0;i<MAXN;i++)c[i]=a[0][i];for(int i=MAXN-2;i>=0;i--){int k=c[i+1]*10+c[i];ans[i]=k/6;k%=6;c[i+1]=0;c[i]=k;}for(int i=MAXN-5;i>=0;i--){int k=ans[i+5]*100000+ans[i+4]*10000+ans[i+3]*1000+ans[i+2]*100+ans[i+1]*10+ans[i];k%=10007;ans[i+5]=k/100000%10;ans[i+4]=k/10000%10;ans[i+3]=k/1000%10;ans[i+2]=k/100%10;ans[i+1]=k/10%10;ans[i]=k%10;}int key=0;for(int i=6;i>=0;i--){if(ans[i])key=1;if(key)printf("%d",ans[i]);}printf("\n");
}

#####例2:
Fruit HDU - 2152
一句话题意:有 n n n种水果,每种必须选 A i A_i Ai​到 B i B_i Bi​个,要选 m m m个,问方案数。
(注意:水果是以个为基本单位,不能够再分。对于两种方案,如果各种水果的数目都相同,则认为这两种方案是相同的。)
这个很简单,有了刚刚的基础之后,我们可以把每个 ( x A i + x A i + 1 + . . . + x B i ) (x^{A_i}+x^{A_i+1}+...+x^{B_i}) (xAi​+xAi​+1+...+xBi​)乘起来,最后 x m x^m xm的系数便是答案。
代码如下:

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=10005;
int n,m,c1[MAXN],c2[MAXN],a[MAXN],b[MAXN];
int main()
{while(~scanf("%d %d",&n,&m)){for(int i=1;i<=n;i++){scanf("%d %d",&a[i],&b[i]);}for(int i=0;i<=m;i++){c1[i]=0;c2[i]=0;}for(int i=a[1];i<=b[1];i++)c1[i]=1;for(int i=2;i<=n;i++){for(int j=a[1];j<=m;j++){for(int k=a[i];k+j<=m&&k<=b[i];k++){c2[j+k]+=c1[j];}}for(int j=a[1];j<=m;j++){c1[j]=c2[j];c2[j]=0;}}printf("%d\n",c1[m]);}
}

到了这里,增加一个小插曲,总结一下基本操作,其实除了上面的操作以外还有其他的,比如:
1.放缩:
c G ( x ) = c g 0 + c g 1 x + c g 2 x 2 + . . . = c ∑ n ≥ 0 g n x n cG(x)=cg_0+cg_1x+cg_2x^2+...=c\sum_{n \ge0}g_nx^n cG(x)=cg0​+cg1​x+cg2​x2+...=c∑n≥0​gn​xn
说白了就是全部乘上c;
2.加减法
F ( x ) ± G ( x ) = ( f 0 ± g 0 ) + ( f 1 ± g 1 ) x + ( f 2 ± g 2 ) x 2 + ( f 3 ± g 3 ) x 3 + . . . F(x)±G(x)=(f_0±g_0)+(f_1±g_1)x+(f_2±g_2)x^2+(f_3±g_3)x^3+... F(x)±G(x)=(f0​±g0​)+(f1​±g1​)x+(f2​±g2​)x2+(f3​±g3​)x3+...
下面将讲一下指数型函数:
#####例3:
ACM/ICPC Regional Contest Beijing 2002 Problem F Chocolate
一个口袋中装有巧克力,巧克力的颜色有 c 种。现从口袋中取出一个巧克力,若取出的
巧克力与桌上已有巧克力颜色相同,则将两个巧克力都取走,否则将取出的巧克力放在桌上。
设从口袋中取出每种颜色的巧克力的概率均等。求取出 n 个巧克力后桌面上剩余 m 个巧克
力的概率。
( c ≤ 100 , n , m ≤ 1000000 ) (c \le100,n,m\le1000000) (c≤100,n,m≤1000000)
很明显只有 2 ∣ ( m − n ) 2|(m-n) 2∣(m−n)的时候才是有解的,本题容易想到的方法是递推,用 f [ i , j ] f[i, j] f[i,j]
表示取出块巧克力后,桌面上剩余块巧克力的概率,然后通过 f [ i , j ] = c − j + 1 c f [ i − 1 , j − 1 ] + j + 1 c f [ i − 1 , j + 1 ] f[i,j]=\frac{c-j+1}{c}f[i-1,j-1]+\frac{j+1}{c}f[i-1,j+1] f[i,j]=cc−j+1​f[i−1,j−1]+cj+1​f[i−1,j+1]进行递推求解。这种方法的时间复杂度为 O ( n c ) O(nc) O(nc),在题目中所给的数据范围下很容易超时。
我们再来考虑考虑用母函数来解决本问题:
我们来求概率的方法是把所有状况分成若干个等概率的状况,看所求的占了多少种状况。由于题目中说每次从口袋中取出每种颜色的巧克力概率相等,所以总状况按照 n 次取的巧克力分为 c n c^n cn种状况,这种分法是考虑到不同颜色巧克力之间的排列关系的,所以要在每种的下面除以 n ! n! n!。
比如这样:
G ( x ) = 1 + x 1 ! + x 2 2 ! + x 3 3 ! + x 4 4 ! + . . . G(x)=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+... G(x)=1+1!x​+2!x2​+3!x3​+4!x4​+...
这就是指数型母函数。
剩余 m 个巧克力这个条件我们可以转化为 c 种巧克力中有 m种巧克力取出了奇数次,c-m
种巧克力取出了偶数次.我们把巧克力分成一种一种考虑,那么那些取出了奇数次的巧克力对应的指数型母函数应该是奇数幂次的系数为 1,偶数幂次的系数幂次为 0。
那么就是 < 0 , 1 , 0 , 1 , 0 , 1 , 0... > <0,1,0,1,0,1,0...> <0,1,0,1,0,1,0...>,同样的道理,那些取出了偶数次的巧克力对应
的指数型母函数为 < 1 , 0 , 1 , 0 , 1 , 0 , 1... > <1,0,1,0,1,0,1...> <1,0,1,0,1,0,1...>.
所以只要知道 < 0 , 1 , 0 , 1 , 0 , 1 , 0... > <0,1,0,1,0,1,0...> <0,1,0,1,0,1,0...>和 < 1 , 0 , 1 , 0 , 1 , 0 , 1... > <1,0,1,0,1,0,1...> <1,0,1,0,1,0,1...>的值就行了,
我们现在来研究一下指数型母函数的性质。
我们称:
G ( x ) = ∑ n ≥ 0 g n x n n ! G(x)=\sum_{n\ge0}g_n\frac{x^n}{n!} G(x)=∑n≥0​gn​n!xn​为序列 < g 0 , g 1 , g 2 , . . . > <g_0,g_1,g_2,...> <g0​,g1​,g2​,...>的指数型母函数。
我们先来研究一下最基本的序列 < 1 , 1 , 1 , 1 , 1 , . . . > <1,1,1,1,1,...> <1,1,1,1,1,...>所对应的指数型母函数,
它对应的指数型母函数根据定义为:
G ( x ) = 1 + x 1 ! + x 2 2 ! + x 3 3 ! + x 4 4 ! + . . . G(x)=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+... G(x)=1+1!x​+2!x2​+3!x3​+4!x4​+...
然而有大佬成功想出了它的值是 e x e^x ex,要用泰勒公式,泰勒公式具体怎么证我就不在这里证了,要看证明的去看百度。
因此 f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + f ′ ′ ′ ( x 0 ) 3 ! ( x − x 0 ) 3 + . . . f(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+\frac{f'''(x_0)}{3!}(x-x_0)^3+... f(x)=f(x0​)+f′(x0​)(x−x0​)+2!f′′(x0​)​(x−x0​)2+3!f′′′(x0​)​(x−x0​)3+...
取 f ( x ) = e x , x 0 = 0 f(x)=e^x,x_0=0 f(x)=ex,x0​=0,得 e x = 1 + x 1 ! + x 2 2 ! + x 3 3 ! + x 4 4 ! + . . . e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+... ex=1+1!x​+2!x2​+3!x3​+4!x4​+...( ( e x ) ′ = ( e x ) (e^x)'=(e^x) (ex)′=(ex))同理可证,运用泰勒公式,我们可以得到:
序列 < 1 , − 1 , 1 , − 1 , 1 , . . . > <1,-1,1,-1,1,...> <1,−1,1,−1,1,...>的指数型母函数为 e − x e^{-x} e−x.
序列 < 0 , 1 , 0 , 1 , 0 , . . . > <0,1,0,1,0,...> <0,1,0,1,0,...>的指数型母函数为 e x − e − x 2 \frac{e^{x}-e^{-x}}{2} 2ex−e−x​.
序列 < 1 , 0 , 1 , 0 , 1 , . . . > <1,0,1,0,1,...> <1,0,1,0,1,...>的指数型母函数为 e x + e − x 2 \frac{e^{x}+e^{-x}}{2} 2ex+e−x​.
因此对应 m m m种巧克力取出了奇数次, c − m c-m c−m种巧克力取出了偶数次的指数型母函数为
G ( x ) = ( e x − e − x 2 ) m ∗ ( e x + e − x 2 ) c − m G(x)=(\frac{e^{x}-e^{-x}}{2})^m*(\frac{e^{x}+e^{-x}}{2})^{c-m} G(x)=(2ex−e−x​)m∗(2ex+e−x​)c−m
现在我们可以开始展开这个式子了,我们可以把 e x e^x ex看作一个整体,将 G ( x ) G(x) G(x)展开成关于 e x e^x ex的多项式的形式,我们考虑展开后每一项 e k x e^{kx} ekx(不妨先设 k > 0 , k < 0 k>0,k<0 k>0,k<0同理)中 x n x^n xn的系数为 k n n ! \frac{k^n}{n!} n!kn​,把它们加起来即可。

这样,我们可以先把 G ( x ) = ( e x − e − x 2 ) m ∗ ( e x + e − x 2 ) c − m G(x)=(\frac{e^{x}-e^{-x}}{2})^m*(\frac{e^{x}+e^{-x}}{2})^{c-m} G(x)=(2ex−e−x​)m∗(2ex+e−x​)c−m用 O ( c 2 ) O(c^2) O(c2)的时间展开成 e x e^x ex的多项式,设 e k x e^{kx} ekx的系数为 p k p_k pk​,那么所求概率为:
g n ∗ n ! ∗ C c m c n = C c m ∗ n ! c n ∗ ∑ k = 1 c k n n ! ∗ ( p k + ( − 1 ) n p − k ) \frac{g_n*n!*C_c^m}{c^n}=C_c^m*\frac{n!}{c^n}*\sum_{k=1}^c\frac{k^n}{n!}*(p_k+(-1)^np_{-k}) cngn​∗n!∗Ccm​​=Ccm​∗cnn!​∗∑k=1c​n!kn​∗(pk​+(−1)np−k​)
= C c m ∗ ∑ k = 1 c k n c n ∗ ( p k + ( − 1 ) n p − k ) =C_c^m*\sum_{k=1}^c\frac{k^n}{c^n}*(p_k+(-1)^np_{-k}) =Ccm​∗∑k=1c​cnkn​∗(pk​+(−1)np−k​)
因此,这个问题我们可以在 O ( c 2 l o g ( n ) ) O(c^2log(n)) O(c2log(n))的复杂度内解决。
附一下代码:

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=105;
double C[MAXN][MAXN];
int c,n,m;
double ksm(double x,long long y)
{double k=1;while(y){if(y&1)k=(k*x);x=(x*x);y>>=1;}return k;
}
void Init()
{C[0][0]=1;for(int i=1;i<=100;i++){C[i][0]=1;for(int j=1;j<=i;j++)C[i][j]=C[i-1][j-1]+C[i-1][j];}
}
int main()
{Init();while(~scanf("%d %d %d",&c,&n,&m)&&c){if((n-m)&1||n<m||c<m){printf("0.000\n");continue;}double ans=0.0;for(int i=0;i<=m;i++){for(int j=0;j<=c-m;j++){double k=2.0*(i+j)-c;double jans=ksm(k/(1.0*c),n)*C[m][i]*C[c-m][j];if((m-i)&1)ans-=jans;elseans+=jans;}}ans/=ksm(2.0,c);ans*=C[c][m];printf("%.3f\n",ans);}
}

#####例4:
HDU 2065 "红色病毒"问题
由于B、D可出现0-n之间任意次,A、C只能出现0-n之间偶数次,
在有了之前的基础后,我相信这个问题并不难。结合指数型母函数可得:
G ( x ) = ( 1 + x 1 ! + x 2 2 ! + x 3 3 ! + x 4 4 ! + . . . ) 2 ∗ ( 1 + x 2 2 ! + x 4 4 ! + x 6 6 ! + x 8 8 ! . . . ) 2 G(x)=(1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+...)^2*(1+\frac{x^2}{2!}+\frac{x^4}{4!}+\frac{x^6}{6!}+\frac{x^8}{8!}...)^2 G(x)=(1+1!x​+2!x2​+3!x3​+4!x4​+...)2∗(1+2!x2​+4!x4​+6!x6​+8!x8​...)2
= e 2 x ∗ ( e x + e − x 2 ) 2 =e^{2x}*(\frac{e^{x}+e^{-x}}{2})^2 =e2x∗(2ex+e−x​)2
= 1 4 ∗ ( e 4 x + 2 e 2 x + 1 ) =\frac{1}{4}*(e^{4x}+2e^{2x}+1) =41​∗(e4x+2e2x+1)
= 1 4 ∗ ( ( 1 + 4 x 1 ! + ( 4 x ) 2 2 ! + ( 4 x ) 2 3 ! + . . . ) + ( 1 + 2 x 1 ! + ( 2 x ) 2 2 ! + ( 2 x ) 2 3 ! + . . . ) + 1 ) =\frac{1}{4}*((1+\frac{4x}{1!}+\frac{(4x)^2}{2!}+\frac{(4x)^2}{3!}+...)+(1+\frac{2x}{1!}+\frac{(2x)^2}{2!}+\frac{(2x)^2}{3!}+...)+1) =41​∗((1+1!4x​+2!(4x)2​+3!(4x)2​+...)+(1+1!2x​+2!(2x)2​+3!(2x)2​+...)+1)
所以,第 x n n ! \frac{x^n}{n!} n!xn​项的系数为 1 4 ( 4 n + 2 n + 1 ) = 4 n − 1 + 2 n − 1 \frac{1}{4}(4^n+2^{n+1})=4^{n-1}+2^{n-1} 41​(4n+2n+1)=4n−1+2n−1
由于题目要输出末两位,因此, a n s = f ( n ) = ( 1 4 ( 4 n + 2 n + 1 ) = 4 n − 1 + 2 n − 1 ) % 100 ans=f(n)=(\frac{1}{4}(4^n+2^{n+1})=4^{n-1}+2^{n-1})\%100 ans=f(n)=(41​(4n+2n+1)=4n−1+2n−1)%100
这个是代码:

#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const long long MOD=100;
long long n;
long long ksm(long long x,long long y)
{long long k=1;while(y){if(y&1)k=(k*x)%MOD;x=(x*x)%MOD;y>>=1;}return k;
}
int main()
{long long T;while(~scanf("%lld",&T)&&T){for(long long t=1;t<=T;t++){scanf("%lld",&n);printf("Case %lld: %lld\n",t,(ksm(4,n-1)+ksm(2,n-1))%MOD);}printf("\n");}
}

【数学】母函数(生成函数)的性质及应用相关推荐

  1. 【母函数|生成函数】学习母函数

    参考文献(尊重原创): 二项式定理 递归和母函数 母函数(对于初学者的最容易理解的) 例题: 普通母函数: 找单词                   题解 摆花                    ...

  2. 【组合数学】生成函数 ( 求和性质 )

    文章目录 一.生成函数求和性质 1 ( 向前求和 ) 二.生成函数求和性质 2 ( 向后求和 ) 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 ...

  3. 【组合数学】生成函数 ( 移位性质 )

    文章目录 一.生成函数移位性质 1 ( 向后移位 ) 二.生成函数移位性质 2 ( 向前移位 ) 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 ...

  4. 【组合数学】生成函数 ( 线性性质 | 乘积性质 )

    文章目录 一.生成函数线性性质 二.生成函数线性性质2 三.生成函数乘积性质 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | ...

  5. Lust(Codeforces Round #446 Div.1-891E)(母函数\生成函数)

    文章目录 题目 思路 代码 题目 你有n个数 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,要进行 kkk 次操作,每次在 111 ~ nnn 中随机选择一个 ...

  6. 数学实验------级数的性质猜测阿波罗飞船轨迹

    数学实验 发现Blog编辑改版了. 课程设计+数学实验,过去的8天在机房呆成了傻狗. 事后考虑的题目: 4.考察级数的一些结果 (1)对充分大的N,计算级数的前N项和,计算它与的比值.能否据此猜测此级 ...

  7. 数学-求和符号的性质

    1. 单重求和 ∑i=1nf(xi)=f(x1)+f(x2)+⋯+f(xn)\sum_{i=1}^nf(x_i)=f(x_1)+f(x_2)+\cdots+f(x_n) i=1∑n​f(xi​)=f( ...

  8. 【组合数学】指数生成函数 ( 指数生成函数性质 | 指数生成函数求解多重集排列 )

    文章目录 一.指数生成函数性质 二.指数生成函数求解多重集排列 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | ...

  9. 【组合数学】生成函数 ( 性质总结 | 重要的生成函数 ) ★

    文章目录 一.生成函数性质总结 二.生成函数与序列的对应 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | 与二项式系数相关 ...

  10. 【组合数学】生成函数 ( 换元性质 | 求导性质 | 积分性质 )

    文章目录 一.生成函数换元性质 二.生成函数求导性质 三.生成函数积分性质 参考博客 : [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式系数 | 常用的生成函数 | 与常数相关 | ...

最新文章

  1. 【java】第二十二节课(HashSet)
  2. 从Android中Activity之间的通信说开来
  3. 【源码类】开源项目汇总
  4. spring bean 小记
  5. garch预测 python_安利几个非常实用的 Python 库
  6. Linux下如何可写挂载ntfs分区
  7. Flink的ProcessFunction API
  8. 三议(巧用:before和inline-block伪元素解决)跨浏览器不定长宽,中心为基点,百分比定位~...
  9. 基于左子结点/右兄弟结点表示法和二叉链表来实现二叉树ADT
  10. FindFirstFile
  11. linewidth方法html,HTML canvas lineWidth用法及代码示例
  12. 面向对象编程中的 诡异事件
  13. 光盘在服务器上装系统,如何通过DELL引导光盘在戴尔11G服务器上安装Win2003操作系统?.docx...
  14. 2019年中南大学研究生复试机试题 题解
  15. 如何判断是否是ssd硬盘?win10查看固态硬盘的方法
  16. Matlab打开绘图工具
  17. error: variable '__this_module' has initializer but incomplete type错误解决
  18. 聚焦行业,2022巨杉客户案例及产品荣获多项殊荣
  19. 被西南财经大学辞退的前院长,获得了今年的诺贝尔经济学奖
  20. pjsip java_使用PJSIP通过TCP进行SIP呼叫

热门文章

  1. 嵌入式程序编写方法与规范
  2. C语言-XLSX基础数据解析(需借助libxml2库)
  3. 赫夫曼压缩解压(java)
  4. C++ 文件操作(CFile类)
  5. 软件生命周期管理系统ALM配置说明(二)
  6. 设计模式(17)----中介者模式
  7. Python数据分析上机
  8. IBinder对象在进程间传递的形式(一)
  9. 【Python】正则表达式re库
  10. stm32f767之ADC