1 条题解
-
1
#include <bits/stdc++.h> #define ll long long #define mod 1000000007 using namespace std; const int N=3; int k,s,t,p; ll n; struct Matrix{ ll a[N][N]; Matrix(){ memset(a,0,sizeof(a));}//构造函数,矩阵初始化全零 Matrix operator*(Matrix &b)const{//重载乘法运算 Matrix tmp; for (int k=1;k<=2;++k) for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) (tmp.a[i][j]+=a[i][k]*b.a[k][j])%=mod; return tmp; } }a,ans; void qpow(ll p){ for (int i=1;i<=2;++i) ans.a[i][i]=1;//ans初始化为单位矩阵 while (p){ if (p&1) ans=ans*a; a=a*a; p>>=1; } } int main(){ cin>>n; a.a[1][2]=a.a[2][1]=a.a[2][2]=1; qpow(n); cout<<ans.a[2][1]; }
- 1
信息
- ID
- 375
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 123
- 已通过
- 45
- 上传者