ACM-数论-矩阵快速幂 POJ3233 矩阵快速幂

这里是题面

这个是写得最好的题解

下次再来补坑

注意一点:矩阵开long long 会超时,矩阵必须开到60+,不然会RE

#include
#include 
#include
using namespace std;
typedef long long ll;
int g;
int mod;
struct mx{
    int v[65][65];//ll会超时%因为取模,所以不需要ll 
}a;
mx mul(mx a,mx t,int g){
    mx res;
    memset(res.v,0,sizeof(res.v));
    for(int i=0;ifor(int j=0;jfor(int k=0;kreturn res;
}
mx power(mx a,ll b,int g){
    mx ans;
    memset(ans.v,0,sizeof(ans.v));
    for(int i=0;i1;
    while(b>0){
        if(b&1)ans=mul(ans,a,g);
        b=b>>1;
        a=mul(a,a,g);
    }
    return ans;
}
int main(){
    int n;
    ll k;
    while(scanf("%d%lld%d",&n,&k,&mod)==3){
        g=n*2;
        memset(a.v,0,sizeof(a.v));
        int i,j;
        for(i=0;ifor(j=0;jif(iscanf("%d",&a.v[i][j]);
            }
            if(i1;
            else a.v[i][i]=1;
        }
        /*for(int i=0;i
        mx m=power(a,k+1,g);
        for(i=0;ifor(j=n;jif(j==i+n)m.v[i][j]=(m.v[i][j]-1+mod)%mod;
                printf("%d",m.v[i][j]);//cout<<;
                if(j1)printf(" ");
            }
            printf("\n");//cout<
        }
    }
    return 0;
} 

你可能感兴趣的:(算法题解)