.
矩阵高速幂想法与快速幂相同
#include<iostream> #include<cstdio> #include<cstring> #define MOD 10000 using namespace std; struct matrix { int mat[2][2]; matrix() { //构造函数与结构体同名 若写作init()函数 需调用 memset(mat,0,sizeof(mat)); } }; matrix mul(matrix A , matrix B) { matrix C; for(int i=0;i<=1;i++) { for(int j=0;j<=1;j++) { for(int k=0;k<=1;k++) { C.mat[i][j]=(C.mat[i][j]+A.mat[i][k]*B.mat[k][j])%MOD; } } } return C; } matrix powmul(matrix A ,int n) { matrix B; //初始化为单位阵 B.mat[0][0]=1; B.mat[1][1]=1; while(n>=1) { if(n&1) { B=mul(B,A); } A=mul(A,A); //自身幂次 n/=2; } return B; } int main() { int n; while(~scanf("%d",&n)) { if(n==-1) break; matrix A; A.mat[0][0]=A.mat[0][1]=A.mat[1][0]=1; A.mat[1][1]=0; A=powmul(A,n); cout<<A.mat[0][1]<<endl; } return 0; }
时间: 2024-11-29 13:29:38