zoukankan      html  css  js  c++  java
  • C++-POJ3233-Matrix Power Series[矩阵乘法][快速幂]

    构造矩阵

     

     

     

     1 #include <cstdio>
     2 const int MAXN=100;
     3 struct Matrix{int a[MAXN][MAXN];}O,I;int N;
     4 void OI(int n){N=n;for(int i=0;i<MAXN;i++)for(int j=0;j<MAXN;j++)O.a[i][j]=0,I.a[i][j]=(i==j);}
     5 Matrix Mul(Matrix A,Matrix B,int MOD){
     6     Matrix C=O;
     7         for(int i=1;i<=N;i++)
     8             for(int j=1;j<=N;j++)
     9                 for(int k=1;k<=N;k++)
    10                     C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%MOD;
    11     return C;
    12 }
    13 Matrix Pow(Matrix A,int n,int MOD){
    14     Matrix B=I;
    15     for(;n;A=Mul(A,A,MOD),n>>=1)if(n&1)B=Mul(B,A,MOD);
    16     return B;
    17 }
    18 Matrix B(int n){
    19     Matrix B=O;
    20     for(int i=1;i<=n;i++)
    21         for(int j=1;j<=n;j++)
    22             scanf("%d",&B.a[i][j]);
    23     for(int i=1;i<=n;i++)
    24         B.a[i+n][i+n]=B.a[i][i+n]=1;
    25     return B;
    26 }
    27 int main(){
    28     int n,m,k;scanf("%d%d%d",&n,&m,&k),OI(2*n);
    29     Matrix A=Pow(B(n),m+1,k);
    30     for(int i=1;i<=n;i++){
    31         for(int j=1;j<=n;j++)
    32             printf("%d ",(A.a[i][j+n]-(i==j)+k)%k);
    33         puts("");
    34     }
    35     return 0;
    36 }
    ~~Jason_liu O(∩_∩)O
  • 相关阅读:
    jquery常用语句
    记录一个奇异的问题
    冰块渲染2
    冰块渲染
    GCAlloc 问题一则
    矩阵基础3
    优化 Overdraw 和 GrabPass
    优化平面法线贴图
    环境模拟
    使用 GPU 加速计算
  • 原文地址:https://www.cnblogs.com/JasonCow/p/12360532.html
Copyright © 2011-2022 走看看