正题

题目链接:https://www.luogu.com.cn/problem/P4451


题目大意

给出\(n\),对于所有满足\(\sum_{i=1}^ma_i=n\)且\(\forall a_i\in N^+\)的序列求

\[\sum_{m=1}^{\infty}\prod_{i=1}^mFbi_{a_i}
\]

其中\(Fbi_x\)表示第\(x\)个斐波那契数

\(1\leq n\leq 10^{10^4}\)


解题思路

因为刚学特征方程所以推的都会写下来,比较冗长

首先考虑斐波那契的生成函数\(F(x)=\sum_{i=0}^nFbi_ix^i\)

那么有\(F(x)=x^2F(x)+xF(x)+x\),可以解得\(F(x)=\frac{x}{1-x-x^2}\)。

然后答案就是

\[\sum_{i=0}^{\infty}F(x)^i=\frac{1}{1-F(x)}=\frac{1}{1-\frac{x}{1-x-x^2}}=\frac{1-x-x^2}{1-2x-x^2}
\]

然后\(\frac{1}{1-2x-x^2}\)是一个特征方程为\(1-2x-x^2\)的递推式,也就是\(a_n=2a_{n-1}+a_{n-2}\)。

然后\(G(x)=\sum_{i=0}^{\infty}a_ix^i\),那么答案就是

\[(1-x-x^2)G(x)=\sum_{i=0}^{\infty}(a_i-a_{i-1}-a_{i-2})x^i=\sum_{i=0}^\infty a_{i-1}x^i
\]

所以我们要求的第\(n\)项就是\(a_{n-1}\)

用特征方程化前面那个递推式了,解出\(1-2x-x^2=0\)有\(x_0=\sqrt 2+1,x_1=-\sqrt 2+1\)

然后设\(a_n=c_0x_0^n+c_1x_1^n\)带入\(a_0=1\)和\(a_1=2\)有方程

\[\left\{\begin{matrix}c_0+c_1=1\\c_0(\sqrt2+1)+c_1(-\sqrt 2+1)=2\end{matrix}\right.
\]

解出来就是

\[\left\{\begin{matrix}c_0=\frac{2+\sqrt 2}{4}\\c_1=\frac{2-\sqrt 2}{4}\end{matrix}\right.
\]

然后我们就有

\[a_n=\frac{2+\sqrt 2}{4}(\sqrt 2+1)^n+\frac{2-\sqrt 2}{4}(-\sqrt 2+1)^n
\]

然后二次剩余跑出来在模\(10^9+7\)下\(\sqrt 2=59713600\)带进去做就好了。

时间复杂度\(O(\log n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll g2=59713600,P=1e9+7;
char s[11000];ll n;
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
signed main()
{
scanf("%s",s+1);n=strlen(s+1);
ll p=0;
for(ll i=1;i<=n;i++)
p=(p*10+s[i]-'0')%(P-1);
ll inv=(P+1)/4;
ll c1=(2-g2+P)%P*inv%P,c2=(2+g2)*inv%P;
ll t1=c1*power(P-g2+1,p)%P*power(P-g2+1,P-2)%P;
ll t2=c2*power(g2+1,p)%P*power(g2+1,P-2)%P;
printf("%lld\n",(t1+t2)%P);
return 0;
}

P4451-[国家集训队]整数的lqp拆分【生成函数,特征方程】的更多相关文章

  1. 洛谷P4451 [国家集训队]整数的lqp拆分 [生成函数]

    传送门 题意简述:语文不好不会写,自己看吧 思路如此精妙,代码如此简洁,实是锻炼思维水经验之好题 这种题当然是一眼DP啦. 设\(dp_n\)为把\(n\)拆分后的答案.为了方便我们设\(dp_0=1 ...

  2. BZOJ 2173 luoguo P4451 [国家集训队]整数的lqp拆分

    整数的lqp拆分 [问题描述] lqp在为出题而烦恼,他完全没有头绪,好烦啊… 他首先想到了整数拆分.整数拆分是个很有趣的问题.给你一个正整数N,对于N的一个整数拆分就是满足任意m>0,a1 , ...

  3. 洛谷P4451 [国家集训队]整数的lqp拆分(生成函数)

    题面 传送门 题解 我对生成函数一无所知 我们设\(F(x)\)为斐波那契数列的生成函数,\(G(x)\)为答案的生成函数,那么容易得到递推关系 \[g_n=\sum_{i=0}^{n-1}f_ig_ ...

  4. 洛谷 P4451 [国家集训队]整数的lqp拆分

    洛谷 这个题目是黑题,本来想打表的,但是表调不出来(我逊毙了)! 然后随便打了一个递推,凑出了样例, 竟然. 竟然.. 竟然... A了!!!!!!! 直接:\(f[i]=f[i-1]*2+f[i-2 ...

  5. P4451 [国家集训队]整数的lqp拆分

    #include <bits/stdc++.h> using namespace std; typedef long long LL; inline LL read () { LL res ...

  6. Luogu4451 [国家集训队]整数的lqp拆分

    题目链接:洛谷 题目大意:求对于所有$n$的拆分$a_i$,使得$\sum_{i=1}^ma_i=n$,$\prod_{i=1}^mf_{a_i}$之和.其中$f_i$为斐波那契数列的第$i$项. 数 ...

  7. [国家集训队]整数的lqp拆分

    我们的目标是求$\sum\prod_{i=1}^m F_{a_i}$ 设$f(i) = \sum\prod_{j=1}^i F_{a_j}$那么$f(i - 1) = \sum\prod_{j=1}^ ...

  8. [国家集训队]整数的lqp拆分 数学推导 打表找规律

    题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...

  9. [BZOJ2173]整数的lqp拆分

    [题目描述] lqp在为出题而烦恼,他完全没有头绪,好烦啊… 他首先想到了整数拆分.整数拆分是个很有趣的问题.给你一个正整数N,对于N的一个整数拆分就是满足任意m>0,a1 ,a2 ,a3…am ...

随机推荐

  1. GitNote基于git的个人云笔记

    优点 可以存储到git服务(如github,giteee)中的能看到历史版本的git记事本工具. git 是一个很棒的工具,GitNote 支持 git 的全部特性,并且不依赖本地 Git 环境. 你 ...

  2. 剑指 Offer 13. 机器人的运动范围

    剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一 ...

  3. 未解决:为什么在struts2下新建ognl的包,会出错?

    首先开始在src下新建了一个名叫ognl的包: 发现在其中放置了一个loginAction,即使是最简单的跳转都不能实现: 直接抛出了java.lang.Exception; 传递参数更出现了异常: ...

  4. 关于mysql的备份和恢复

    备份:在登录之前(cmd中)mysqldump -u root -p [数据库名称] > c:/back.sql备份的话,肯定是DBA才能做,所以只能用root:恢复mysql -u root ...

  5. HbaseWAL

    1.WAL意为 Write Ahead Log ,类似MySQL中的binlog,用来做灾难恢复之用,HLog记录数据的所有变更,一旦数据修改,就可以从Log中进行恢复. Hbase采用类LSM的架构 ...

  6. WPF路由事件

    ​    这节讲一下WPF中的路由事件(Routed Event). [什么是事件] 在了解路由事件前,我们应先来了解一下什么是事件(Event). 在Windows系统中,像鼠标单击,双击,移动这样 ...

  7. 关于notepad++使用的那些事儿

    时间:2019-04-11 整理:PangYuaner 标题:Notepad++正则表达式语法 地址:https://www.cnblogs.com/kekec/p/5255475.html 标题:N ...

  8. centos7 Tomcat 多项目配置

    2021-07-30 1. Tomcat 各目录功能说明 bin :脚本文件目录,存放启动和关闭 Tomcat 的脚本文件conf:存放 Tomcat 的配置文件,server.xml 尤其重要log ...

  9. 我的第一个npm包:wechat-menu-editor 基于Vue的微信自定义菜单编辑器

    wechat-menu-editor 微信自定义菜单编辑器 前言 在做微信公众号相关开发时,基本上会去开发的功能就是微信自定义菜单设置的功能,本着不重复造轮子的原则,于是基于Vue封装的一个微信自定义 ...

  10. C语言中volatile、register、const、static、extern、 auto关键字的作用

    一.volatile详解 volatile的本意是"易变的" 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据.当要求使用volat ...