YBTOJ:斐波拉契(矩阵快速幂)
文章目录
- 题目描述
- 题目描述
- 代码
题目描述
题目描述
关键在于如何转化为本题的题目。。。
设
y=(1-根号5)/2$$
再令:
A(n)=xn +++ yn
通过尝试可以发现,A其实就是一个1,3为前两项的斐波拉契数列
则
xn=A(n)-yn
A的值可以用矩阵快速幂来求
而y是在(-1,0)的区间
所以分一下n的奇偶性,就可以求出答案了
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7;
ll a,b,c,k;
ll ans[4][4],res[4][4],trans[4][4];
void mul1(){//res*resmemset(trans,0,sizeof(trans));for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){for(int p=1;p<=2;p++){trans[i][j]+=res[i][p]*res[p][j];trans[i][j]%=mod;}}}for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){res[i][j]=trans[i][j];}}
}
void mul2(){//res*ansmemset(trans,0,sizeof(trans));for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){for(int p=1;p<=2;p++){trans[i][j]+=ans[i][p]*res[p][j];trans[i][j]%=mod;}}}for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){ans[i][j]=trans[i][j];}}
}
void ksm(ll w){while(w){if(w&1) mul2();mul1();w>>=1;}return;
}
void print(){for(int i=1;i<=2;i++){for(int j=1;j<=2;j++){printf("%d ",ans[i][j]);}printf("\n");}
}
int main()
{ans[1][1]=ans[2][2]=1;res[1][1]=res[1][2]=res[2][1]=1;scanf("%lld",&a);if(a<=2) {printf("1");return 0;}ksm(a-2);
// print();printf("%lld",(ans[1][1]+ans[2][1])%mod);return 0;
}
YBTOJ:斐波拉契(矩阵快速幂)相关推荐
- 又见斐波那契~矩阵快速幂入门题
链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...
- 「GXOI / GZOI2019」逼死强迫症——斐波那契+矩阵快速幂
题目 [题目描述] ITX351 要铺一条 $2 \times N$ 的路,为此他购买了 $N$ 块 $2 \times 1$ 的方砖.可是其中一块砖在运送的过程中从中间裂开了,变成了两块 $1 \t ...
- P5303 [GXOI/GZOI2019]逼死强迫症(斐波拉契、矩阵乘法)
解析 非常妙的一个题,感受到了斐波拉契优美的归纳性质. 首先,不难发现只要两个1*1的位置固定,中间的摆法就固定了,而两边的方案都是经典的斐波拉契数列(设为 fif_ifi). 那么枚举中间的间隔再 ...
- 斐波拉契数列前n项和 斐波拉契数列第n项
此篇题解不为别的,纯属纪念,纪念一个已经且也许永远淡出我生活的人... 记不清是大二还是大三了,只记得在教四304实验室,你教我如何用矩阵快速幂来求解斐波拉契数列的第n项,然后考我怎么用类似的方法计算 ...
- 深入剖析斐波拉契数列
深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...
- js求解斐波拉契数列
斐波拉契数列,英文名称Fibonacci sequence,通常用 F(n) 表示,形成的序列称为斐波那契数列 该数列由0和1开始,后面的每一项数字都是前面两项数字的和,用数学语言描述就是 F(0) ...
- Python 探讨斐波拉契数列模素数的周期问题
Python 探讨斐波拉契数列模素数的周期问题之目录 前言 一.生成斐波拉契数列 二.创建素数列表 三.搜索周期数列的循环节 3.1 斐波拉契数列模 p p p 的周期 3.2 循环节的搜寻代码 3. ...
- 冒泡排序,斐波拉契迭代、生成器
冒泡排序: l=[1,3,0,100,1000,8,2,9,5,11,8]def maopao(l):for i in range(len(l)-1):if l[i+1] < l[i]:a= l ...
- [python]练习之递归和循环实现斐波拉契数列
1 # 程序功能:用递归和循环实现斐波拉契数列 2 # 0 1 1 2 3 5 8 13 21 34 3 4 def digui_fibo(number): 5 if number == 1: 6 r ...
最新文章
- TCP 的那些事儿(下)
- java 学习心得 (近期的)
- redhat下给普通用户增加sudo命令,让他可以获得修改等权限
- java 添加图片背景_java添加背景图片
- c语言表达式5 gt 3 gt 1,C语言题目谁会做?
- 用python建立三元一次方程_python简单的三元一次方程求解实例
- FRAGSTATS.4中用移动窗口算法计算景观指标步骤
- DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一
- mysql批量导出_mysql批量导出导入
- Android dex2jar反编译dex文件报错 Detail Error Information in File .\classes-error.zip
- 音频格式怎么转换成mp3?
- 如何关闭 Linux 中的嘟嘟声
- 应用pagehelper实现大屏展示自动换页
- 浏览器无法访问部分网站
- 生成模型技术发展过程
- Vue 安装echarts-gl引入vue报错
- input框限制只能输入正整数、字母、小数、汉字
- 【转载】采购订单中的容差
- 2019/01/01 一位前端实习生 艰辛过程 励志 实习周记(二)——第一周
- FlashFXP使用技巧五则
热门文章
- 程序员必知的 Python 陷阱与缺陷列表
- getbean方法找不到bean_iphone手机静音找不到怎么办 iphone静音找不到解决方法【图文】...
- python课程思路_学习python课程第二十六天
- 计算机辅助教育会议,子会议1:学习科学、计算机辅助合作学习、智慧教育
- abs函数的使用方法 oracle_SQL Server 常用函数使用方法
- 学计算机与学英语作文,初二英语作文(关于计算机与学习)
- aop springboot 传入参数_Springboot添加AOP打印请求参数
- 7-3 最短路径 (20 分)(分支限界+思路+详解)
- [剑指offer]面试题37:两个链表的第一个公共结点
- dptcpp 题目 2352: [信息学奥赛一本通-T1440]数的划分-dp