猪猪的斐波那契
来源:互联网 发布:进销存 java 编辑:程序博客网 时间:2024/05/16 23:01
题目描述
Xiaozhu学会了斐波那契数列第n项的计算方法之后,开始胡思乱想。
对于一般的二阶递推关系,给定 f[n] = a * f[n-1] + b * f[n-2]中的系数a,b,并给定初值f[0]和f[1],能否快速求出f[n]?
这里0<=n<=10^18,最后输出f[n]%(10^9+7)既可。
输入
输入多组数据,不超过10000组
每行一组数据,为5个整数f[0],f[1], a, b, n 含义见上文 1<= f[0],f[1], a, b<=10^9,n<=10^18
输出
对每一组数据输出一个整数 f[n] % (10^9+7), 表示 f[n]对(10^9+7)取余的结果
样例输入
1 1 1 1 33 9 8 2 100000000000000000
样例输出
3468290679
参考之前的一篇文章(快速幂):http://blog.csdn.net/lnlnlnying/article/details/53413615?locationNum=1&fps=1
#include <iostream> using namespace std; #define M 1000000007 struct Matrix{ long long m[2][2]; };Matrix I = {1,0, 0,1}; Matrix matrixmul(Matrix a,Matrix b) { Matrix c; c.m[0][0]=((a.m[0][0]*b.m[0][0])%M+(a.m[0][1]*b.m[1][0])%M)%M; c.m[0][1]=((a.m[0][0]*b.m[0][1])%M+(a.m[0][1]*b.m[1][1])%M)%M; c.m[1][0]=((a.m[1][0]*b.m[0][0])%M+(a.m[1][1]*b.m[1][0])%M)%M; c.m[1][1]=((a.m[1][0]*b.m[0][1])%M+(a.m[1][1]*b.m[1][1])%M)%M; return c; } long long dfs(int f0,int f1,int a,int b,long long n){ Matrix c=I; Matrix m={0,1, b,a}; while(n){if (n&1) c=matrixmul(c,m); n>>=1; m=matrixmul(m,m); } return ((c.m[1][0]*f0)%M+(c.m[1][1]*f1)%M)%M; } int main(){int a,b,f0,f1; long long n; while(cin>>f0>>f1>>a>>b>>n){ cout<<dfs(f0,f1,a,b,n-1)<<endl; } return 0; }
0 0
- 猪猪的斐波那契
- 斐波那契堆的实现
- 有趣的斐波那契数列
- 斐波那契函数的优化
- 斐波那契的递归算法
- 斐波那契数列的解法?
- 斐波那契数列的应用
- 斐波那契数列的打印
- 斐波那契数列的神奇
- 巧妙的斐波那契
- 斐波那契数列的
- nefu 斐波那契的整除
- 斐波那契的整除nefu115
- 斐波那契数列的性质
- 斐波那契数列的计算
- 斐波那契数列的研究
- 新的斐波那契数列
- 斐波那契数列的计算
- Apache Spark:大数据处理统一引擎
- Java 学习
- 用代码来加载天空盒
- 【Linux】linux下杀死进程(kill)的N种方法
- npm添加淘宝镜像
- 猪猪的斐波那契
- 你应当知道的 7 个 Java 新工具
- TCP之(send and receive information)
- Spring MVC之@RequestMapping 详解
- JavaScript DOM编程艺术 学习笔记(十)用JavaScript实现动画效果
- ajaxfileupload.js的使用
- TCP之(chat)
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- Hbase-1.2.4 javaAPI操作总结