计算斐波那契数列

  • O(n)复杂度方法

  • O(logn)复杂度方法

计算矩阵的n次方,可以先求矩阵的n/2次方,然后再平方即可。

 

 1 #include <cassert>
 2 
 3 struct Matrix2By2
 4 {
 5     Matrix2By2
 6     (
 7         long long m00 = 0,
 8         long long m01 = 0,
 9         long long m10 = 0,
10         long long m11 = 0
11     )
12         :m_00(m00), m_01(m01), m_10(m10), m_11(m11)
13     {
14     }
15 
16     long long m_00;
17     long long m_01;
18     long long m_10;
19     long long m_11;
20 };
21 
22 Matrix2By2 MatrixMultiply
23 (
24     const Matrix2By2& matrix1,
25     const Matrix2By2& matrix2
26 )
27 {
28     return Matrix2By2(
29         matrix1.m_00 * matrix2.m_00 + matrix1.m_01 * matrix2.m_10,
30         matrix1.m_00 * matrix2.m_01 + matrix1.m_01 * matrix2.m_11,
31         matrix1.m_10 * matrix2.m_00 + matrix1.m_11 * matrix2.m_10,
32         matrix1.m_10 * matrix2.m_01 + matrix1.m_11 * matrix2.m_11);
33 }
34 
35 Matrix2By2 MatrixPower(unsigned int n)
36 {
37     assert(n > 0);
38 
39     Matrix2By2 matrix;
40     if (n == 1)
41     {
42         matrix = Matrix2By2(1, 1, 1, 0);
43     }
44     else if (n % 2 == 0)
45     {
46         matrix = MatrixPower(n / 2);
47         matrix = MatrixMultiply(matrix, matrix);
48     }
49     else if (n % 2 == 1)
50     {
51         matrix = MatrixPower((n - 1) / 2);
52         matrix = MatrixMultiply(matrix, matrix);
53         matrix = MatrixMultiply(matrix, Matrix2By2(1, 1, 1, 0));
54     }
55 
56     return matrix;
57 }
58 
59 long long Fibonacci_Solution3(unsigned int n)
60 {
61     int result[2] = { 0, 1 };
62     if (n < 2)
63         return result[n];
64 
65     Matrix2By2 PowerNMinus2 = MatrixPower(n - 1);
66     return PowerNMinus2.m_00;
67 }
View Code

 

转载于:https://www.cnblogs.com/larry-xia/p/10659613.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ANTLR4,用于代码镜像和基于Web的DSL的Primefaces扩展

DSL是很酷的东西&#xff0c;但是我不清楚它们有什么用。 然后我意识到它们对以下方面有好处&#xff1a; 摆脱复杂的UI 意思是 更快的做事方式 而已。 当我阅读此博客时&#xff0c;我得出了这个结论。 如果您的用户是技术人员&#xff0c;并且不惧怕类似SQL的语法处理方…

js 动态绑定事件 on click 完美解决绑定不成功

动态绑定坑了多少人..... //绑定 $("ol").on("click","li a",function(){ ... }) //解绑 $("ol").off("click","li a"); 完美解决动态绑定: ol 为动态生成html的父类. li a 为其动态生成的html, 绑定使用on…

连接mysql超时时间设置多少_怎么设置数据库的连接数和连接超时时间

如何设置数据库的连接数和连接超时时间连接数的话可以修改spfile文件来约束查看当前的连接数&#xff1a;select count(*) from v$process;–数据库允许的最大连接数&#xff1a;select value from v$parameter where name ‘processes’&#xff1b;–修改最大连接数&#xf…

【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-4 单一职责原则...

/** * 软件设计七大原则-单一职责原则 学习笔记 * author cnRicky * date 2018.11.10 */单一职责原则 定义&#xff1a;不要存在多于一个导致类变更的原因一个类只负责一个职责&#xff0c;如果分别有两个职责&#xff0c;那就建立两个类分别负责职责1和职责2一个类/接口/方法只…

移动架构-数据库分库和全版本升级

在项目中&#xff0c;往往涉及到数据库的版本升级&#xff0c;通常会有两种升级方式&#xff0c;一种是纯代码实现&#xff0c;一种是脚本实现&#xff0c;这里使用脚本升级&#xff0c;这样的升级方式更便于维护 思路 全版本升级&#xff0c;重点在于数据的迁移&#xff0c;这…

Java中的硬件事务性内存,或者为什么同步将再次变得很棒

总览 硬件事务内存有潜力允许多个线程同时以推测方式访问相同的数据结构&#xff0c;并使缓存一致性协议确定是否发生冲突。 HTM旨在为您提供细粒度锁定的可伸缩性&#xff0c;粗粒度锁定的简单性以及几乎没有锁定的性能。 如果JVM支持&#xff0c;则您的程序或库是使用过程粒度…

mysql5.7乱码_mysql5.7中解决中文乱码的问题

在使用mysql5.7时&#xff0c;会发现通过web端向数据库中写入中文后会出现乱码&#xff0c;但是在数据库中直接操作SQL语句插入数据后中文就显示正常&#xff0c;这个问题怎么解决呢&#xff1f;此处不对mysql的数据编码过程和原理进行讲解&#xff0c;如果有兴趣的同学可以自己…

a 链接点击下载

1. 将链接设置为.zip 结尾2.在a元素中添加download 属性,&#xff08;目前只有chrome、firefox和opera支持&#xff09; function download(src) { var $a $("<a></a>").attr("href", src).attr("download", "img.png");…

Codeforces Global Round 2 D. Frets On Fire (动态开点线段树,沙雕写法)

题目链接&#xff1a;D. Frets On Fire 思路&#xff1a;明明可以离散化二分写&#xff0c;思路硬是歪到了线段树上&#xff0c;自闭了&#xff0c;真实弟弟&#xff0c;怪不得其他人过得那么快 只和查询的区间长度有关系&#xff0c;排完序如果相邻的两个点的差值小于等于查询…

hdu 1069 Monkey and Banana 【动态规划】

题目 题意&#xff1a;研究人员要测试猴子的IQ&#xff0c;将香蕉挂到一定高度&#xff0c;给猴子一些不同大小的箱子&#xff0c;箱子数量不限&#xff0c;让猩猩通过叠长方体来够到香蕉。 现在给你N种长方体&#xff0c; 要求&#xff1a;位于上面的长方体的长和宽 要小于 …

使用带有OAuth2的Web应用程序和使用JWT来调用API – WSO2 API Manager

在这篇文章中&#xff0c;我将分享我在WSO2 API管理器&#xff08;API-M&#xff09;方面的经验和理解&#xff0c;以解决该行业中非常普遍和有用的情况。 简要地说明以下流程。 公开了一个API&#xff0c;供应用程序开发人员在API Manager&#xff08;可为API添加访问控制&a…

git仓库的推送问题

git仓库的推送问题 推送问题 先说结论。先拉取&#xff0c;pull拉取完之后再commi提交。 如果先提交&#xff0c;再拉取的话&#xff0c;git会提示项目冲突&#xff0c;此时需要先解决冲突&#xff0c;而某些时候&#xff0c;我们不一定会处理好所有的冲突&#xff0c;而导致…

scala的插值器

Scala 为我们提供了三种字符串插值的方式&#xff0c;分别是 s, f 和 raw。它们都是定义在 StringContext 中的方法。 s 字符串插值器 val a 2println(s"小明今年$a 岁了") f 字符串插值器 它除 s 的功能外(不指定格式就和 s 一样)&#xff0c;还能进行格式化输出&a…

src/main/resorces applicationContext.xml

<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:context"http://www.springframework.org/schema/context"xmlns:aop"http://www.springframework.org/schem…

layui的checkbox示例

1.html页面: var isSkipcheckbox ;if (appOptions.isSkip ! "0") {isSkipcheckbox checked"";}<input type"checkbox" name"" lay-filter"type" lay-skin"primary" title"是否允许跳过" value&quo…

confluence 编辑器加载_Onlyoffice集成Confluence的工作原理

onlyoffice 与 confluence集成使用&#xff0c;使用onlyoffice connector for confluence 插件对接confluence插件在confluence中创建了一个新的按钮动作&#xff0c;Edit in OnlyOffice 用来处理office文档。这允许多用户实时协作并且将变更返回到confluence中。具体工作原理&…

红帽JBoss BRMS和BPMS富客户端框架展示了与GWT / Errai / UberFire和AngularJS的多语言集成...

上周&#xff0c;我发布了一个博客&#xff0c;重点介绍了我的演示文稿&#xff0c;该演示文稿展示了我们在BRMS和BPMS平台内完成的工作&#xff0c;Drools和jBPM项目的产品化版本所产生的丰富客户端平台。 该演示文稿是所有屏幕截图和视频&#xff0c;您可以在此处找到博客和幻…

AJAX的内容

第 1 章&#xff1a;原生 AJAX 1.1 AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。 AJAX 不是新的编程语言&#xff0c;而是…

洛谷P1099 树网的核

传送门 80分 $ Floyd $ 树的直径可以通过枚举求出。直径的两个端点$ maxi,maxj $ &#xff0c;由此可知对于一个点 $ k $ &#xff0c;如果满足 $ d[maxi][k]d[k][maxj]d[maxi][maxj] $ 那么 $ k $ 点一定在直径上。分别枚举位于直径上的起点 $ s $ 与终点 $ t $ 。 $ ecg $ 定…

HTML中直接写js 函数

1.在HTML中直接写JS函数: <body οnlοad"javascript:{window.location.hrefhttp://www.baidu.com/}">2.写在script标签里的话就是&#xff1a; <script>function tiao(){window.location.href"http://www.baidu.com/"}</script><!--…