zoukankan      html  css  js  c++  java
  • HDU 1757 A Simple Math Problem

    http://acm.hdu.edu.cn/showproblem.php?pid=1757

    矩阵快速幂

    /*
    If x < 10 f(x) = x.
    If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
    
    |f(10) |      |a0 a1 a2 ...a8 a9|   |f(9)|
    | f(9) |      | 1  0  0 ... 0  0|   |f(8)|
    | .....|  =   |.. ... ... ... ..|   | .. |
    | f(2) |      | 0  0  0 ... 0  0|   |f(1)|
    | f(1) |      | 0  0  0 ... 1  0|   |f(0)|
    
    另A举证为10*10的举证,如上图。
    可以推出:
    (f(n),f(n-1),...,f(n-9))^(-1) = A^(n-9)*(f(9),f(8),...,f(0))^(-1)
    */
    
    #include<iostream>
    using namespace std;
    __int64 k,m;
    struct mat
    {
        int mar[10][10];
    }a,b,tmp;
    
    mat matrixmul(mat a,mat b)
    {
        int i,j,k;
        for(i = 0;i < 10;i++)
            for(j = 0;j < 10;j++)
            {
                tmp.mar[i][j] = 0;
                for(k = 0;k < 10;k++)
                    tmp.mar[i][j] += (a.mar[i][k] * b.mar[k][j]) % m;
                tmp.mar[i][j] %= m;
            }
        return tmp;
    }
    
    void matrix_binary()
    {
        while(k)
        {
            if(k & 1)
                b = matrixmul(b,a);
            a = matrixmul(a,a);
            k = k >> 1;
        }
    }
    int main()
    {
        int i;
        while (scanf("%I64d%I64d",&k,&m) != EOF)
        {
            memset(a.mar,0,sizeof(a.mar));
            for(i = 1;i < 10;i++)
                a.mar[i][i-1] = 1;
            memset(b.mar,0,sizeof(b.mar));
            for(i = 0;i < 10;i++)
                b.mar[i][i] = 1;
            for(i = 0;i < 10;i++)
                scanf("%d",&a.mar[0][i]);
            if(k < 10)
            {
                printf("%d\n", k % m);
                continue;
            }
            k -= 9;
            matrix_binary();
            int res = 0;
            for(i = 0;i < 10;i++)
                res += (b.mar[0][i] * (9-i)) % m;
            printf("%d\n",res%m);
        }
        return 0;
    }

     

  • 相关阅读:
    .net core
    asp.net core之abp框架
    C#
    c#
    C#
    C#
    C#
    技术术语
    mysql
    006.内测.情景之迷你财务记账
  • 原文地址:https://www.cnblogs.com/qianmacao/p/2452719.html
Copyright © 2011-2022 走看看