快速幂矩阵连乘模板

#include <iostream>
#include <stdio.h>
#include <math.h>
#define Mod 3
using namespace std;
long long f[100];
const int MAX = 2;
typedef struct {
	long long m[MAX][MAX];
} Matrix;
Matrix P = { 0,1,
1,1 };
Matrix I = { 1,0,
0,1 };

Matrix matrixmul(Matrix a, Matrix b) //矩阵乘法
{
	int i, j, k;
	Matrix c;
	for (i = 0; i < MAX; i++)
		for (j = 0; j < MAX; j++)
		{
			c.m[i][j] = 0;
			for (k = 0; k < MAX; k++)

				c.m[i][j] += (a.m[i][k] * b.m[k][j]) /*% Mod*/;
			c.m[i][j] /*%= Mod*/;
		}
	return c;
}
Matrix quickpow(long long n)
{
	Matrix m = P, b = I;
	while (n >= 1)
	{
		if (n & 1)
			b = matrixmul(b, m);
		n = n >> 1;
		m = matrixmul(m, m);
	}
	return b;
}

posted @   Landnig_on_Mars  阅读(11)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示