题意:略
解题说明:
ac代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll mod; struct matrix{ ll s[2][2]; int n,m; void clear(){ s[0][0]=1;s[0][1]=1;s[1][0]=1;s[1][1]=0; n=2;m=2; } }; matrix mix(matrix A,matrix B){ matrix re; re.n=A.n;re.m=B.m; for(int i=0;i<re.n;i++){ for(int j=0;j<re.m;j++){ re.s[i][j]=0; for(int k=0;k<A.m;k++){ re.s[i][j]=(re.s[i][j]+(A.s[i][k]*B.s[k][j])%mod)%mod; } } } return re; } matrix qpow(matrix A,ll b){ matrix re;re.n=2;re.m=2; re.s[0][0]=1;re.s[0][1]=0;re.s[1][0]=0;re.s[1][1]=1; while(b){ if(b&1)re=mix(re,A); A=mix(A,A); b>>=1; } return re; } int main(){ ll n,m; scanf("%lld%lld",&n,&mod); if(n==1||n==2){ puts("1"); return 0; } matrix p,A; p.s[0][0]=1;p.s[1][0]=1; p.n=1;p.m=1; A.clear(); A=qpow(A,n-2); p=mix(A,p); printf("%d",p.s[0][0]); return 0; }