POJ3070 斐波那契数列递推 矩阵快速幂模板题
2024-10-17 15:09:13
题目分析:
对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可
#include<iostream>
#include<stdio.h>
using namespace std; const int mod = ;
struct mat{
int m[][];
}; mat operator * (mat a, mat b){ //重载乘号,同时将数据mod10000
mat ret;
for(int i = ; i < ; i++){
for(int j = ; j < ; j++){
long long temp = ;
for(int k = ; k < ; k++){
temp += a.m[i][k] * b.m[k][j];
temp %= mod;
}
ret.m[i][j] = temp;
}
}
return ret;
} mat pow_mat(mat a, int n){ //矩阵快速幂和快速幂相同(广义快速幂的思想)
mat res = a;
while(n){
if(n&) res = res * a;
a = a*a;
n >>= ;
}
return res;
} int main(){
int n;
while(scanf("%d", &n) !=EOF){
if(n == -) break;
if(n == ) printf("0\n");
else if(n == ) printf("1\n");
else if(n == ) printf("1\n");
else{
mat a; //构造一个初始的矩阵 其n-2次方的m[0][0]就是所求的答案
a.m[][] = ;
a.m[][] = ;
a.m[][] = ;
a.m[][] = ;
mat ans = pow_mat(a, n-); //调用矩阵快速幂计算
printf("%d\n", ans.m[][]);
}
}
return ;
}
最新文章
- 记一次tomcat线程创建异常调优:unable to create new native thread
- JQ对象到底是什么
- C# Enum 进行逻辑运算
- 37. Binary Tree Zigzag Level Order Traversal &;&; Binary Tree Inorder Traversal
- AutoHotKey使用:空格键坏了怎么办?
- 夺命雷公狗---DEDECMS----6快速入门之总结篇
- JavaEE基础(四)
- mvc伪静态<;三>; IIS配置
- Windows API 的数据类型与 Delphi 数据类型对照表
- AlarmDemo-with-Database
- Ehcache(01)——简介、基本操作
- 背投广告js
- 算法 python实现(二) 冒泡排序
- ICE学习第一步-----配置ICE环境变量
- 2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理
- UML中的类间的关系
- JS框架设计读书笔记之-节点模块
- Django--入门篇:下载与项目生成
- Linux input系统数据上报流程【转】
- 【C/C++】Dijkstra算法的简洁实现
热门文章
- how to design AWS SQS?
- [LeetCode] 152. Maximum Product Subarray 求最大子数组乘积
- [LeetCode] 10. Regular Expression Matching 正则表达式匹配
- 《30天自制操作系统》笔记2 --- 初步了解汇编产生的二进制(Day1)
- mac生成iOS证书(配图)
- 第02组 Alpha冲刺(6/6)
- Go Windows 环境安装及配置(一)
- (三)golang--执行流程分析
- 1+X”中级Web前端证书对应课程分析
- 在eclipse中,用maven创建一个web项目工程