定义
快速幂
应用
快速求斐波那契数列某一项
结论
- 可以弄一个 2*2 的矩阵
-
A=[0111]
- 那么会发现,斐波那契数列除前两个1外,第 n 项就是
An
,可以自己试试。
证明
- 可以归纳证明
程序
//Luogu-1962
#include <cstdio>
#define Ha 1000000007
typedef long long ll
struct matrix{ll a[2][2]
ll n
matrix multi(matrix x,matrix y){
matrix z={0}
for (ll i=0
for (ll j=0
for (ll k=0
z.a[i][j]=(z.a[i][j]+(x.a[i][k]*y.a[k][j])%Ha)%Ha
return z
}
matrix ksm(matrix x,ll y){
matrix ret={0}
ret.a[0][0]=ret.a[1][1]=1
for (
if (y&1) ret=multi(ret,x)
return ret
}
int main(){
A.a[0][0]=0,A.a[0][1]=A.a[1][0]=A.a[1][1]=1
scanf("%lld",&n)
printf("%lld\n",ksm(A,n-1).a[1][1])
}