矩阵快速幂
来源:互联网 发布:opencv 分水岭算法 编辑:程序博客网 时间:2024/06/07 23:41
矩阵快速幂求斐波那契数列的第N项
#include <iostream>using namespace std;#define SIZE 2 // 矩阵大小struct CMatrix // 矩阵结构体{ int data[SIZE][SIZE]; // 数据};CMatrix multiply(const CMatrix &x, const CMatrix &y) // 矩阵乘法运算{ CMatrix result; for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { result.data[i][j] = 0; // 初始化矩阵为0矩阵 } } for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { for (int k = 0; k < SIZE; k++) { result.data[i][j] += (x.data[i][k] * y.data[k][j]); // 矩阵乘法 } } } return result;}CMatrix quickPower(CMatrix mat, int n) // 矩阵快速幂{ CMatrix result; for (int i = 0; i < SIZE; i++) // 初始化矩阵为1矩阵 { for (int j = 0; j < SIZE; j++) { if (i == j) { result.data[i][j] = 1; } else { result.data[i][j] = 0; } } } while (n > 0) // 快速幂计算 { if (n % 2 != 0) { result = multiply(result, mat); } mat = multiply(mat, mat); n = n / 2; } return result;}void printMatrix(const CMatrix &mat) // 打印矩阵{ for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { cout << mat.data[i][j] << ' '; } cout << endl; }}int main(){ CMatrix mat; mat.data[0][0] = 1; // 构造斐波那契数列的变换矩阵 mat.data[0][1] = 1; mat.data[1][0] = 1; mat.data[1][1] = 0; printMatrix(quickPower(mat, 40)); // 输出第40个斐波那契矩阵 return 0;}
0 0
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- poj3070--矩阵 快速幂
- POJ3233矩阵快速幂
- poj3070Fibonacci 矩阵快速幂
- 矩阵的快速幂
- 矩阵快速幂
- 矩阵的快速幂
- iOS开发:兼容iOS 10 资料整理笔记
- 时间日期格式转换
- Android Studio 开启支持 VectorDrawable
- TCP长连接与短连接的区别
- Java Web 报org.hibernate.LazyInitializationException: could not initialize proxy - no Session异常
- 矩阵快速幂
- 源代码审计-本地javaWeb网站-jeeCMS7
- 【Linux 内核网络协议栈源码剖析】数据包发送
- 中文分词器(IK)的配置文件
- Mac Item2 SSH免密登录Linux 服务器的两种方式
- charles高级使用总结
- RY哥查字典(字符串双模hash初步)
- JAVAEE项目遇到的问题
- 基本算法-股神