hdu 1757 A Simple Math Problem (矩阵快速幂,简单)

题目

 

 

 

也是和LightOJ 1096 和LightOJ 1065 差不多的简单题目。

 

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int num,mod;
struct matrix
{
    int a[10][10];
};

matrix multiply(matrix x,matrix y)//矩阵乘法
{
       matrix temp;
       for(int i=0;i<num;i++)
       {
               for(int j=0;j<num;j++)
               {
                       int ans=0;
                       for(int k=0;k<num;k++)
                       {
                               ans+=((x.a[i][k]*y.a[k][j])%mod);
                       }
                       temp.a[i][j]=ans%mod;
               }
       }
       return temp;
}

matrix calc(matrix origin ,matrix answ,int n)//矩阵快速幂——answ*origin^n
{
     while(n)
     {
             if(n%2==1)//原来比赛时一直是这里被我不小心改成了0,怪不得案例一直都过不了
                    answ=multiply(origin,answ);
             origin=multiply(origin,origin);
             n/=2;
     }
     return answ;
}

int main()
{
    int n;
    while(scanf("%d%d",&n,&mod)!=EOF)
    {
        matrix origin= {0,1,0,0,0,0,0,0,0,0,
                        0,0,1,0,0,0,0,0,0,0,
                        0,0,0,1,0,0,0,0,0,0,
                        0,0,0,0,1,0,0,0,0,0,
                        0,0,0,0,0,1,0,0,0,0,
                        0,0,0,0,0,0,1,0,0,0,
                        0,0,0,0,0,0,0,1,0,0,
                        0,0,0,0,0,0,0,0,1,0,
                        0,0,0,0,0,0,0,0,0,1};
        matrix answ={0,0,0,0,0,0,0,0,0,0,
                     1,0,0,0,0,0,0,0,0,0,
                     2,0,0,0,0,0,0,0,0,0,
                     3,0,0,0,0,0,0,0,0,0,
                     4,0,0,0,0,0,0,0,0,0,
                     5,0,0,0,0,0,0,0,0,0,
                     6,0,0,0,0,0,0,0,0,0,
                     7,0,0,0,0,0,0,0,0,0,
                     8,0,0,0,0,0,0,0,0,0,
                     9,0,0,0,0,0,0,0,0,0};
        num=10;
        for(int i=9;i>=0;i--)//要注意这里的a9~a0的输入顺序
            scanf("%d",&origin.a[9][i]);

        answ=calc(origin,answ,n-9);
        printf("%d\n",answ.a[9][0]%mod);
    }
    return 0;
}
View Code

 

 

 

 

posted @ 2014-02-20 22:00  laiba2004  Views(309)  Comments(0Edit  收藏  举报