斐波拉契加强版
来源:互联网 发布:java调用main函数 编辑:程序博客网 时间:2024/04/30 04:52
题目描述
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - 1) + F(n - 2),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围内的非负整数,请设计一个高效算法,计算第n项F(n)。第一个斐波拉契数为F(0) = 1。
给定一个非负整数,请返回斐波拉契数列的第n项,为了防止溢出,请将结果Mod 1000000007。
测试样例:
3
返回:3
运用矩阵快速幂
#include<iostream>#include <vector>#include<string>#include <algorithm>using namespace std;void multi(int a[2][2], int b[2][2]){int res[2][2];res[0][0] = (a[0][0] * b[0][0] + a[0][1] * b[1][0]) % 1000000007;res[0][1] = (a[0][0] * b[0][1] + a[0][1] * b[1][1]) % 1000000007;res[1][0] = (a[1][0] * b[0][0] + a[1][1] * b[1][0]) % 1000000007;res[1][1] = (a[1][0] * b[0][1] + a[1][1] * b[1][1]) % 1000000007;a[0][0] = res[0][0];a[0][1] = res[0][1];a[1][0] = res[1][0];a[1][1] = res[1][1];}int getNthNumber(int n) {int base[2][2];base[0][0] = 1;base[0][1] = 1;base[1][0] = 1;base[1][1] = 0;int ans[2][2];ans[0][0] = 1;ans[0][1] = 0;ans[1][0] = 0;ans[1][1] = 1;while (n){//矩阵快速幂if (n & 1){multi(ans, base);}multi(base, base);n = n >> 1;}return ans[0][0];}int main(){cout << getNthNumber(3) << endl;return 0;}
0 0
- 斐波拉契加强版
- 斐波拉契加强版
- 加强版 X5
- Edit控件加强版
- 信封问题加强版
- LIS加强版
- GPS 数据格式加强版
- 加强版理发师问题
- 动物统计加强版
- 下拉菜单加强版
- helloworld驱动加强版
- hdu4521 加强版LIS
- silverlight 加强版GroupBox
- 动物统计加强版
- 动物统计加强版
- 动物统计加强版
- 装载问题加强版
- 动物统计加强版
- scala细节-你不知道的'_'
- 浅谈数据库中的知识发现
- context使用startActivity时的错误
- 从零开始掌握Cocos2d-x 3.x视频教程第1季__开发环境搭建
- Android 使用 BroadcastReceiver 的权限设置
- 斐波拉契加强版
- Spring 初始化过程
- C++ 虚函数表解析
- PL/SQL基础(1):语法
- 000-algorithm-quick_sort
- 鲁棒性的获得 —— 测试函数的代码框架
- 冒泡排序
- react native语法ECMAScript 6 学习笔记----箭头函数和延展操作符
- android sdk content loader has encountered a problem错误