题目描述
大家都知道Fibonacci数列吧,f[1]=1,f[2]=1,f[3]=2,f[4]=3.......也就是f[n]=f[n-1]+f[n-2]。现在,问题很简单,输入n和m,求第n项取模m。
输入
输入n,m。
1<=n<=2 000 000 000 。
1<=m<=1 000 000 010 。
输出
输出第n项取模m
样例输入
5 1000
样例输出
5
思路:这是一个神奇的推导,震惊!矩阵相乘竟然能得到斐波那契数列!
害!首先你要知道矩阵乘法是什么,具体是怎么操作的
然后,给你几个显而易见的式子:
f[i]=f[i-1]*1+f[i-2]*1;
f[i-1]=f[i-1]*1+f[i-2]*0;
f[i-2]=f[i-1]*0+f[i-2]*1;
现在你能意会为啥矩阵乘法为啥可以得到斐波那契数列了吧~
这就是两个2*2的矩阵相乘嘛
在这贴一张网上找的图(
好了,话不多说上代码~
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
struct dd{
ll sq[3][3];
};
//两个矩阵相乘
dd