[P1962] 斐波那契数列 (矩阵快速幂)
时间:2019-09-12
本文章向大家介绍[P1962] 斐波那契数列 (矩阵快速幂),主要包括[P1962] 斐波那契数列 (矩阵快速幂)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:求出 f(n) mod 1000000007 的值,n 在long long 范围内;
解法:矩阵快速幂;
1.矩阵快速幂;
= X …………①
同理:
= X …………②
我们把②式带入①式
得:
= X
附上代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define rg register using namespace std; const int mod = 1e9+7; ll n; ll a[101][101],b[101][101]; ll ans[101][101]; inline void matrix(){ memcpy(b,ans,sizeof(ans)); memset(ans,0,sizeof(ans)); for(rg int k=1;k<=2;++k) for(rg int i=1;i<=2;++i) for(rg int j=1;j<=2;++j) ans[i][j]=(ans[i][j]+(b[i][k]*a[k][j])%mod)%mod; } inline void matrix_(){ memset(b,0,sizeof(b)); for(rg int k=1;k<=2;++k) for(rg int i=1;i<=2;++i) for(rg int j=1;j<=2;++j) b[i][j]=(b[i][j]+(a[i][k]*a[k][j])%mod)%mod; memcpy(a,b,sizeof(b)); } inline void matrix_ksm(ll bas){ while(bas){ if(bas&1) matrix(); matrix_(); bas>>=1; } } int main() { scanf("%lld",&n); a[1][1]=a[1][2]=a[2][1]=1; ans[1][1]=ans[2][2]=1; matrix_ksm(n); printf("%lld",ans[2][1]); return 0; }
原文地址:https://www.cnblogs.com/nnezgy/p/11515503.html
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
- 解决Sublime在LinuxMint下无法输入中文的问题
- 使用Redis做MyBatis的二级缓存
- C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
- windows添加静态路由
- C++继承与派生(原理归纳)
- Linux下如何查看自己的服务器有没有无线网卡
- WAMP配置虚拟主机
- linux开关端口问题
- Python 3.6实现单博主微博文本、图片及热评爬取
- 用Django实现一个可运行的区块链应用
- Python的dict实现原理及与Java的比较探究
- 关于位域如何节省内存(C++)
- mysql的小知识点(关于数据库的导入导出 对于windows)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- springboot之快速构建springboot应用
- NLP简报(Issue#4)
- LaTeX常用篇(一)---公式输入
- 几个Python“小伎俩”(续)
- Transformers Assemble(PART III)
- 【python-双指针】pair with target sum
- springboot开发之配置Servlet三大组件(Servlet、Filter、Listener)
- vuejs之v-html
- linux之解决使用VMWare安装centos7后无法联网问题
- c++之引用
- c++之函数的其它用法
- c++之函数重载
- c++面向对象之封装
- c++之结构体struct和类class的区别
- c++之对象的初始化和清理