定義
快速冪
應用
快速求斐波那契數列某一項
結論
- 可以弄一個 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])
}