我在本地运行结果 每次都不一样 不知为啥
#include<bits/stdc++.h>
using namespace std;
const int mod = 1000;
struct matrix{
int z[10][10];
};
int n;
matrix operator * (const matrix &a,matrix &b){
matrix c;
for(int k = 0;k < 8;k++)
for(int i = 0;i < 8;i++)
for(int j = 0;j < 8;j++)
c.z[i][j] = (c.z[i][j] + a.z[i][k] * b.z[k][j]) % mod;
return c;
}
matrix ksm(matrix base,int power){
matrix ans;
for(int i = 0;i < 8;i++) ans.z[i][i] = 1;
while(power){
if(power & 1){
ans = ans * base;
}
base = base * base;
power = power >> 1;
}
return ans;
}
matrix dp; matrix ans;
int main(){
cin >> n;
for(int i = 0;i < 8;i++){
dp.z[i][i + 1] = 1;
dp.z[i + 1][i] = 1;
}
dp.z[0][7] = dp.z[7][0] = 1;
dp.z[4][3] = dp.z[4][5] = 0;
cout<<endl<<endl;
ans = ksm(dp,n);
//for(int i = 0;i < 8;i++){
// for(int j = 0;j < 8;j++)
// cout<<ans.z[i][j]<<" ";
// cout<<endl;
// }
cout<<ans.z[0][4];
return 0;
}