首页 > 其他 > 详细

A Simple Math Problem HDU1757

时间:2019-02-02 21:31:24      阅读:128      评论:0      收藏:0      [点我收藏+]

一次ac

在做递推关系的题目的时候  快速幂矩阵真的很有用

技术分享图片
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,k;
struct matrix{
    int arr[10][10];
};

matrix multi( matrix a, matrix b )
{
         matrix c;
    for(int i=0;i<10;i++)
        for(int j=0;j<10;j++){
            c.arr[i][j]=0;
            for(int w=0;w<10;w++)
                c.arr[i][j]=(c.arr[i][j]+a.arr[i][w]*b.arr[w][j]%k)%k;
        }
    return c;
}

int fast(matrix a,int x){
    matrix ans;
    memset(ans.arr,0,sizeof(ans.arr));
    for(int i=0;i<10;i++)ans.arr[i][i]=1;

    while(x){
        if(x&1){
            ans=multi(ans,a);
               }
        x>>=1;
        a=multi(a,a);
    }
    int sum=0;
    for(int i=0;i<10;i++)
    {
        sum+=ans.arr[0][i]*( 9-i );
        sum%=k;
    }
  return sum;
}
int main(){

   while(scanf("%d%d",&n,&k)==2)
   {

       if(n<10){ printf("%d\n",n%k); continue; }

     matrix  temp;
     memset(temp.arr,0,sizeof(temp.arr) );
     for(int i=1;i<10;i++)
        temp.arr[i][i-1]=1;
        for(int i=0;i<10;i++)scanf("%d",&temp.arr[0][i] );

     printf("%d\n",fast( temp , n-9 )%k );
   }
    return 0;
}
View Code

 

A Simple Math Problem HDU1757

原文:https://www.cnblogs.com/bxd123/p/10349164.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!