Luogu P1962 斐波那契數列(矩陣乘法模板)
阿新 • • 發佈:2018-11-30
累了
明天再解釋
#include<cstdio> #define ll long long using namespace std; const ll mod = 1000000007; struct matrix { ll ma[2][2]; }; matrix ans; ll n; matrix mul(matrix A,matrix B) { matrix C; C.ma[0][0] = C.ma[0][1] = C.ma[1][0] = C.ma[1][1] = 0; for(int i = 0View Code; i < 2; i++) for(int j = 0; j < 2; j++) for(int k = 0; k < 2; k++) C.ma[i][j] += A.ma[i][k] * B.ma[k][j] % mod; return C; } matrix quickpow(matrix A,ll n) { matrix B; B.ma[0][0] = B.ma[1][1] = 1; B.ma[0][1] = B.ma[1][0] = 0; while(n) {if(n&1)B = mul(A,B); A = mul(A,A); n >>= 1; } return B; } int main() { scanf("%lld",&n); matrix A; A.ma[0][0] = A.ma[0][1] = A.ma[1][0] = 1; A.ma[1][1] = 0; ans = quickpow (A,n); printf("%lld",ans.ma[0][1]%mod); return 0; }