hdu1757 - A Simple Math Problem(矩阵快速幂模板题)

Lele now is thinking about a simple function f(x). 

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); 
And ai(0<=i<=9) can only be 0 or 1 . 

Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m. 

Input

The problem contains mutiple test cases.Please process to the end of file. 
In each case, there will be two lines. 
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9. 

Output

For each case, output f(k) % m in one line.

Sample Input

10 9999
1 1 1 1 1 1 1 1 1 1
20 500
1 0 1 0 1 0 1 0 1 0

Sample Output

45
104

这道题的矩阵推导

hdu1757 - A Simple Math Problem(矩阵快速幂模板题)_第1张图片

 可以参考下图来理解hdu1757 - A Simple Math Problem(矩阵快速幂模板题)_第2张图片

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
int n;
int mod;
int len=10;
struct node {
	int mat[15][15];//定义矩阵 
}x,y; 

void init(){//初始化 
	memset(x.mat ,0,sizeof(x.mat));
	for(int i=1;i>1;
	}
	return y;
} 
int main(){
    while(~scanf("%d%d",&n,&mod)){
    	init(); 
    	for(int i=0;i

 

你可能感兴趣的:(日常刷题,模板)