zoukankan      html  css  js  c++  java
  • hdu 1757 A Simple Math Problem (矩阵高速幂)

    这一题构造的矩阵的方法同样。

    须要注意的是。题目中a0~a9 与矩阵相乘的顺序。


    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #define N 10
    
    using namespace std;
    int mod;
    typedef long long LL;
    
    struct matrix
    {
        LL a[10][10];
    }origin;
    
    
    int n=10,m;
    
    matrix multiply(matrix x,matrix y)
    {
        matrix temp;
        memset(temp.a,0,sizeof(temp.a));
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                for(int k=0;k<n;k++)
                {
                    temp.a[i][j]+=x.a[i][k]*y.a[k][j];
                    temp.a[i][j]=(temp.a[i][j])%mod;
                }
            }
        }
        return temp;
    }
    
    matrix matmod(matrix A,int k)
    {
        matrix res;
    
        memset(res.a,0,sizeof res.a);
        for(int i=0;i<n;i++)res.a[i][i]=1;
    
        while(k)
        {
            if(k&1)
            res=multiply(res,A);
            k>>=1;
            A=multiply(A,A);
        }
        return res;
    }
    
    void print(matrix x)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            cout<<" "<<x.a[i][j];
            puts("");
        }
        printf("---------------
    ");
    }
    
    int main()
    {
        int k;
        while(scanf("%d%d",&k,&mod)!=EOF)
        {
            memset(origin.a,0,sizeof origin.a);
            for(int i=0;i<10;i++)
            {
                origin.a[i][0]=i;
            }
            //print(origin);
            matrix res;
            memset(res.a,0,sizeof res.a);
    
            for(int i=0;i<9;i++)res.a[i][i+1]=1;
            for(int i=9;i>=0;i--)scanf("%d",&res.a[9][i]);
            //print(res);
            res=matmod(res,k);
    
            matrix ans = multiply(res,origin);
    
            printf("%d
    ",ans.a[0][0]);
        }
        return 0;
    }
    


查看全文
  • 相关阅读:
    Spring Cloud Gateway配置自定义异常返回
    C#开机启动,托盘图标等小功能
    微信内置浏览器搞事情之调试模式
    物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权
    物联网架构成长之路(55)-Gateway+Sentinel实现限流、熔断
    物联网架构成长之路(53)-Sentinel流量控制中间件入门
    物联网架构成长之路(54)-基于Nacos+Gateway实现动态路由
    物联网架构成长之路(52)-基于Nacos+prometheus+grafana的监控
    物联网架构成长之路(51)-Nacos微服务配置中心、服务注册服务发现
    物联网架构成长之路(50)-EMQ配置SSL证书,实现MQTTs协议
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10634353.html
  • Copyright © 2011-2022 走看看