佳佳的 Fibonacci

link

loj那么贫瘠的土地上竟然还能长出洛谷没有的花。这是我第一篇记录loj上题目的随笔。

首先之前学过一个小结论,对本题的解决有极大的帮助,但我考场上竟竟竟然忘了,于是拿了60分的部分分跑路了……

一开始的那个函数T不是很好推关系,直接上矩阵乘法不是很好弄,于是考虑推柿子:

首先有结论:

i=1NFi=Fi+2

所以

TN=i=1Ni×Fi=i=1N(NN+i)×Fi=N×i=1NFii=1N1(Ni)×Fi=N×FN+2i=1N1Fi+21=N×FN+2i=1N+1Fi+1=N×FN+2FN+3+2

用矩阵快速幂即可。

压了一点行。

#include<cstdio>
#define int long long
#define F(A) for(int A=1;A<=2;A++)
int m,mod;
struct node{int a[3][3];}ne;
node operator *(node s1,node s2){
	node an=ne;
	F(i)F(j)F(k)an.a[i][j]+=s1.a[i][k]*s2.a[k][j],an.a[i][j]%=mod;
	return an;
}
node qpow(node s1,int s2){
	if(s2==1)return s1;
	node an=qpow(s1,s2>>1);
	if(s2&1)return an*an*s1;
	else return an*an;
}
signed main(){
	node ss=ne;ss.a[1][1]=ss.a[1][2]=ss.a[2][1]=1;
	scanf("%lld%lld",&m,&mod);node an=qpow(ss,m+1);
	int f2=an.a[2][1]+an.a[2][2],f3=an.a[1][1]+an.a[1][2];
	printf("%lld",(m*f2-f3+2)%mod);return 0;
}
posted @   Feyn618  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示