题目:
题意:
Fn = aFn-1 + bFn-2 ,给出Fn数列的前两项F0和F1,求Fn【n大到要用字符串输入】
笔记:
(1)十进制矩阵快速幂
递推式直接给出了,但N大的我不敢写矩阵快速幂,赛后了解到十进制矩阵快速幂,原理和二进制一样:比如求矩阵A^123,等价于计算:A^100 * A^20 * A^3 = (A^100)^1 * (A^10)^2 * (A^1)^3,括号里的就和二进制每次平方是一样的道理
代码:
#include <bits/stdc++.h>
#define sz(x) (x).size()
using namespace std;
typedef long long ll;
struct matrix{
ll m[2][2];
};
matrix I = {1,0,0,1};
ll x0,x1,a,b,mod;
string s;
inline matrix operator * (const matrix &A,const matrix &B){
matrix res;
res.m[0][0] = (A.m[0][0]*B.m[0][0]+A.m[0][1]*B.m[1][0])%mod;
res.m[0][1] = (A.m[0][0]*B.m[0][1]+A.m[0][1]*B.m[1][1])%mod;
res.m[1][0] = (A.m[1