P4451-生成函数

P4451

题目描述

题目描述

题解

设斐波那契数列的生成函数为 F ( x ) = ∑ f i x i F(x)=\sum f_ix^i F(x)=fixi
那么答案 G ( x ) G(x) G(x)的生成函数即为:
G ( x ) = ∑ i = 0 ∞ F ( x ) i = 1 1 − F ( x ) G(x)=\sum\limits_{i=0}^{\infty}F(x)^i=\frac{1}{1-F(x)}\\ G(x)=i=0F(x)i=1F(x)1
考虑怎么求出 F ( x ) F(x) F(x),这里有一种普遍的方法:
f i = f i − 1 + f i − 2 + [ n = 1 ] F ( x ) = ∑ f i x i = ∑ ( f i − 1 + f i − 2 + [ n = 1 ] ) x i F ( x ) = ∑ f i − 1 x i + ∑ f i − 2 x i + x = x F ( x ) + x 2 F ( x ) + x F ( x ) = x 1 − x − x 2 f_i=f_{i-1}+f_{i-2}+[n=1]\\ F(x)=\sum f_ix^i=\sum(f_{i-1}+f_{i-2}+[n=1])x^i\\ F(x)=\sum f_{i-1}x^i+\sum f_{i-2}x^i+x=xF(x)+x^2F(x)+x\\ F(x)=\frac{x}{1-x-x^2} fi=fi1+fi2+[n=1]F(x)=fixi=(fi1+fi2+[n=1])xiF(x)=fi1xi+fi2xi+x=xF(x)+x2F(x)+xF(x)=1xx2x

那么 G ( x ) G(x) G(x)为:
G ( x ) = x 2 + x − 1 x 2 + 2 x − 1 = 1 − x x 2 + 2 x − 1 G(x)=\frac{x^2+x-1}{x^2+2x-1}=1-\frac{x}{x^2+2x-1} G(x)=x2+2x1x2+x1=1x2+2x1x
由于 n n n过大,不能直接求。
类似这样的问题的实质即是给定有理函数 P ( x ) = Q ( x R ( x ) P(x)=\frac{Q(x}{R(x)} P(x)=R(x)Q(x,求 P ( x ) P(x) P(x)的某项系数,解决的方法通常有待定系数法和不同根的有理展开定理

这里用待定系数法。
首先设:
x 2 + 2 x − 1 = ( 1 − p 1 x ) ( 1 − p 2 x ) x^2+2x-1=(1-p_1x)(1-p_2x) x2+2x1=(1p1x)(1p2x)
解得 p 1 , p 2 p_1,p_2 p1,p2
再设:
x x 2 + 2 x − 1 = a 1 − p 1 x + b 1 − p 2 x \frac{x}{x^2+2x-1}=\frac{a}{1-p_1x}+\frac{b}{1-p_2x} x2+2x1x=1p1xa+1p2xb
解得 a , b a,b a,b
又因为:
[ x n ] a 1 − p 1 x = a p 1 n [x^n]\frac{a}{1-p_1x}=ap_1^n [xn]1p1xa=ap1n
那么就可以得到 x n x^n xn的系数了

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7; 
int ksm(int a,int b){
	int ans=1;
	while(b){
		if(b&1) ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}return ans;
}
signed main(){
	int re=0;char ch;
	for(ch=getchar();isdigit(ch);ch=getchar()) re=re*10%(mod-1)+ch-'0';
	re=re-1;
	cout<<(1ll*485071604*ksm(1ll*940286408,re%(mod-1))%mod+1ll*514928404*ksm(1ll*59713601,re%(mod-1))%mod)%mod<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值