Ejemplo n.º 1
0
SquareMatrix pow(SquareMatrix m, int n)
{
	SquareMatrix res;

	res.init();
	for (; n > 0; n = n >> 1) {
		if (n & 1) {
			res = res * m;
		}
		m = m * m;
	}
	return res;
}
Ejemplo n.º 2
0
int main()
{
	LL tmp_a[SIZE][SIZE] = {{1, 4, 1, 0, 1},
							{1, 0, 0, 0, 0},
							{0, 2, 1, 0, 0},
							{0, 1, 0, 0, 1},
							{0, 0, 0, 1, 0}};
	
	while (scanf("%d %d", &N, &M) && N != 0) {
		if (N == 1) {
			ans = 1;
		} else {
			A.init(tmp_a);
			A = pow(A, N - 2);
			ans = (A.a[0][0] * 5 + A.a[0][1] * 1 + A.a[0][2] * 2 + A.a[0][3] * 1 + A.a[0][4] * 0) % M;
		}
		printf("%d\n", ans);
	}

	return 0;
}