• 矩阵幂和(可做模板)——pku3233


    结构体里尽量不要放int64不然容易爆内存
    View Code
    #include<stdio.h>
    #include
    <string.h>

    int mod;
    int n;

    struct data
    {
    int map[30][30];
    };
    data res;

    data add(data a,data b)
    //矩阵加
    {
    data re;
    int i,j;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    re.map[i][j]
    =(a.map[i][j]+b.map[i][j])%mod;
    }
    }
    return re;
    }

    data mul(data a,data b)
    //矩阵乘
    {
    int i,j,k;
    data re;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    int all=0;
    for(k=0;k<n;k++)
    {
    all
    +=(a.map[i][k]*b.map[k][j])%mod;
    all
    %=mod;
    }
    re.map[i][j]
    =all%mod;
    }
    }
    return re;
    }

    data mi(data f,
    int p)//矩阵求幂
    {
    int i,j;
    data all;
    for(i=0;i<n;i++){
    for(j=0;j<n;j++){
    all.map[i][j]
    =0;
    if(i==j)all.map[i][j]=1;
    }
    }

    while(p>0)
    {
    if((p&1)==1)
    {all
    =mul(all,f);}

    f
    =mul(f,f);
    p
    >>=1;
    }

    return all;
    }

    data full(data a,
    int p)//矩阵A^1+A^2+A^3...A^p
    {
    data d;
    if(p==1)return a;
    elseif(p&1)
    {
    return add(full(a,p-1),mi(a,p));
    }
    else
    {
    return mul(full(a,p>>1),add(mi(a,p>>1),res));
    }
    }

    int main()
    {
    int num;
    while(scanf("%d%d%d",&n,&num,&mod)!=EOF)
    {
    int i,j;
    data f;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    scanf(
    "%d",&f.map[i][j]);
    res.map[i][j]
    =0;
    if(i==j)res.map[i][j]=1;
    }
    }

    data temp
    =full(f,num);
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    if(j>0)printf("");
    printf(
    "%d",temp.map[i][j]%mod);
    }
    printf(
    "\n");
    }

    }
    return0;
    }

      

  • 相关阅读:
    MySQL用户权限管理
    索引 聚集索引 唯一索引 普通索引 联合索引 覆盖索引
    sql注入
    pymysql
    MySQL 多表查询
    MySQL 聚合函数以及 优先级
    mysql 语句 字段 和结构主键外键的增删改
    协程
    事件 event
    进程池和线程池 concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2116414.html
Copyright © 2020-2023  润新知