#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<math.h>
#include<vector>
#include<iostream>
using namespace std;
typedef long long ll;
int b[11];
int kk,n,mod;
struct node
{
int a[11][11];
node()
{
memset(a,0,sizeof(a));
}
}A,B;
node operator *(node a,node b)
{
node ans;
for(int i=1;i<=10;i++)
for(int j=1;j<=10;j++)
for(int k=1;k<=10;k++)
ans.a[i][j]=((ans.a[i][j]+a.a[i][k]*b.a[k][j])%mod+mod)%mod;
return ans;
}
int aa(int n)
{
node ans=A,k=B;
while(n)
{
if(n&1)
ans=ans*k;
k=k*k;
n=n/2;
}
return (ans.a[1][1]%mod+mod)%mod;
}
int main()
{
while(~scanf("%d%d",&kk,&mod))
{
for(int i=1;i<=10;i++)
scanf("%d",&b[i]);
for(int i=1;i<=10;i++)
A.a[1][i]=10-i;
for(int i=1;i<=10;i++)
{
if(i==1)
{
for(int j=1;j<=10;j++)
B.a[j][i]=b[j];
}
else
B.a[i-1][i]=1;
}
if(kk<10)
cout<<(kk%mod+mod)%mod<<endl;
else
cout<<aa(kk-9)<<endl;
}
}
A Simple Math Problem矩阵快速幂)
最新推荐文章于 2019-07-02 13:43:53 发布
本文介绍了一种利用矩阵快速幂解决特定数列求值问题的方法。通过定义特定矩阵结构和运算方式,实现了对数列第n项高效计算,并提供了完整的C++代码实现。
479

被折叠的 条评论
为什么被折叠?



