分析
代码
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
const int N=3;
int n,m;
void mul(int c[],int a[],int b[][N]){//处理一维矩阵和方阵乘法
int temp[N]={0};
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
temp[i]=(temp[i]+(ll)a[j]*b[j][i])%m;
}
}
memcpy(c,temp,sizeof temp);
}
void mul(int c[][N],int a[][N],int b[][N]){//处理方阵的乘法,利用了函数的重载
int temp[N][N]={0};
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
for(int k=0;k<N;k++)
temp[i][j]=(temp[i][j]+(ll)a[i][k]*b[k][j])%m;
memcpy(c,temp,sizeof temp);
}
int main(){
cin >> n >> m;
int f[N]={1,1,1};//f1{f1,f2,s1}
int a[N][N]={
{0,1,0},
{1,1,1},
{0,0,1}
};
n--;
while(n){//快速幂
if(n&1)mul(f,f,a);
mul(a,a,a);
n >>= 1;
}
cout << f[2];
}
大佬我也想用一下你的图片,和另一位兄弟一样
感谢大佬 很清晰
%%%
大佬,我能使用一下你的图片吗?只用于打卡处,方便自己以后复习
ok
%