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;
    }
    


查看全文
  • 相关阅读:
    软件的安全性应从哪几个方面去测试?
    目前主要的测试用例设计方法是什么?
    什么是软件质量?
    软件配置管理的作用?软件配置包括什么?
    什么是软件测试?软件测试的目的与原则
    软件生存周期及其模型是什么?
    软件的概念和特点?软件复用的含义?构件包括哪些?
    一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
    在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试。
    测试08
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10634353.html
  • Copyright © 2011-2022 走看看