【数论】矩阵快速幂

参考:P3193 [HNOI2008]GT考试 题解

放个板子

struct Martix
{
	int a[30][30]; // 在这里修改矩阵的大小
	Martix() { memset(a, 0, sizeof(a)); }
	Martix operator*(const Martix &B) const // 乘法运算符重载
	{
		Martix res;
		for (int i = 0; i < m; i ++ )
			for (int j = 0; j < m; j ++ )
				for (int k = 0; k < m; k ++ )
					res.a[i][j] = (res.a[i][j] + a[i][k] * B.a[k][j]) % mod;
		return res;
	}
} G, F;

Martix power(Martix &a, int b)
{
	Martix ans;
	for (int i = 0; i < m; i ++ ) ans.a[i][i] = 1;
	while (b)
	{
		if (b & 1) ans = ans * a;
		b >>= 1;
		a = a * a;
	}
	return ans;
}

你可能感兴趣的:(数论,矩阵,算法,数据结构)