用分治思想求斐波那契数列(转自追梦__的博客)

一个表关联另一个表的数据时,下拉框数据不显示 一个表关联另一个表的数据时,数据不显示 ,如下 解决方法如下: 把这个方法拿出来,在methods上面加一个mounted(),放在mounted里面,这样数据就能正常显示了。ps:methods里面方法太多容易出错,之前数据显示不出来,通过前后端调试发现根本没有走这个代码。放在mounted里面就成功了 ... 阅读详情

原文链接

其实我们还可以将这个算法求斐波拉契数列的第10000000项对m取余,这样用到矩阵的乘法,下面给出具体的矩阵推导以及代码。



C++代码   收藏代码
    #include<iostream>  
    using namespace std;  
    class Matrix{  
    public:   
          int width,height;  
          Matrix(){          
          }  
          Matrix(int hei,int wid){  
             width = wid; height = hei;   
             v = new int*[height];  
               for (int i=0;i<height;i++)  
                  v[i] = new int[width];            
          }  
          void set(int hei,int wei){  
               v = new int*[height];  
               for (int i=0;i<height;i++)  
                  v[i] = new int[width];  
          }  
          int** v;  
          friend Matrix operator*(Matrix a,Matrix b){  
             Matrix res(a.height,a.width);  
             //确保数据正确   
             //if (a.width!=b.height) retutn res;  
             for (int i=0;i<a.height;i++){  
                for (int j=0;j<a.width;j++){  
                    int ans = 0;  
                    for (int k=0;k<a.width;k++){  
                        ans += a.v[i][k]*b.v[k][j];  
                    }  
                    res.v[i][j] = ans;  
                }      
             }  
             return res;  
          };  
          friend Matrix operator%(Matrix a,int m){  
             Matrix ans(a.height,a.width);  
             for (int i=0;i<a.height;i++)  
                for (int j=0;j<a.width;j++)  
                    ans.v[i][j] = a.v[i][j] % m;  
             return ans;       
          }  
    };  
    Matrix a(2,2);  
    Matrix run(int b,int m){  
        Matrix t;  
        if (b==1) return a%m  
        ;  
        if (b&1){  
            t=run(b/2,m)%m;  
            return ((t*t)*a)%m;     
        }else{  
            t=run(b/2,m)%m;  
            return (t*t)%m;        
        }  
    }  
    int main(){  
        int n,m;  
    while(1){  
        cin >> n >> m;  
        a.v[0][0] = 0; a.v[0][1] = 1; a.v[1][0] = 1; a.v[1][1] = 1;   
        Matrix ans;  
        ans = run(n,m);  
        for (int i=0;i<ans.height;i++){  
           for (int j=0;j<ans.width;j++)  
              cout << ans.v[i][j] << " ";  
           cout << endl;     
        }  
    }  
        system("pause");  
        return 0;      
    }   

    分治就是分而治之的缩写,分治的思想并不局限于这道题,它能极大的提高算法的效率。所以掌握它是十分必要的。



斐波那契数列求解(矩阵相乘、直接累加) 分别采用矩阵相乘法(分治递归)和直接累加求和的方法求解第n个斐波那契数 立即下载

相关推荐

斐波拉契数列分治法实现

斐波拉契数列用分治法实现算法,整体效率比用递归方式实现要快出很多。我已经亲手测试过了,希望上传的资源可以帮到大家。如果有任何问题要记得给我留言,大家一起探讨,共同进步啊。

分治法实例:斐波那契数列

我们都十分熟悉斐波那契数列的定义:Fn = Fn-1 + Fn-2,其中F0 = 0、F1 = 1。那么我们如何求解斐波那契数列的某个特定项呢?方法一:递归求解。这种方法看似简单,可是实际上我们会重复计算许多已经计算过的项,最后递归树竟然是一棵完全二叉树,时间复杂度达到了Θ(φ^n),其中φ = (sqrt(5)+1)/2。我们不再讨论此方案。方法二:递推求解。即利用Fn的定义式,以线性的复杂度O...

Salmon_lee的博客 6395

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)解决办法

问题:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 很久没用这台电脑的mysql了,今天需要连接数据库,启动数据库报错: ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO) 解决方法: 查阅资料后知道了,应该使用已知的用户名和密码登陆 mysql -u root -p 然而密

一个超会写Bug的程序猿的博客 43万+

斐波那契数列:从分治法到动态规划

文章目录

记忆碎片的博客 3836

Workbench-nCode下发动机引擎应力疲劳分析

在工程数据库中定义材料模型参数,结构场分析基本参数:密度7850Kg/m3、弹性模量210E9Pa、泊松比0.3,疲劳分析参数:应力-疲劳曲线表(S-N Curve),应力-疲劳曲线如下图2所示,如果没有合适的数据可使用结构钢材料进行分析。网格为四面体高阶单元,各零件的单元尺寸如下表1所示,单元质量分布如下图3所示。在workbench平台下搭建分析流程如下图6所示,前述设定完成后,提交求解后即可得到相应的应力、应变结果,更新结果后目录树中会有相应的nCode DesignLife插件,如下图7所示。

ansysxuexizhe的博客 1548

Code Composer Studio 12.0.0版本 官方例程导入实战指南

本文详细介绍了在Code Composer Studio 12.0.0版本中,如何利用内置的Resource Explorer工具高效导入官方例程的完整实战指南。通过分步讲解定位开发板、导入工程、配置编译器及调试验证等关键操作,帮助开发者快速上手TI微控制器开发,避免常见错误,有效提升学习与开发效率。

weixin_29169899的博客 123

分治法求Fibonacci数列

算法课的简单练习 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。 波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&gt;=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契...

weixin_40406659的博客 4216

国税局发票查验中英文验证码识别最新版,识别率99.9%

采用深度学习进行发票查验验证码模型的训练,在我电脑上模型训练的环境如下: 显卡:RTX 2080TI tensorflow-gpu:2.5.3 1 训练集和测试集的准备 发票查验的验证码分为4种类型,分别为黑色、红色、黄色、蓝色,经过我的测试,采用4个模型的效果最好,每个模型对应识别一种类型的验证码。 首先我们4种类型的验证码都准备10万张。 00黑色类型的验证码: 01红色类型的验证码: 02黄色类型的验证码: 03蓝色类型的验证码: 验证码图像图像准备好后,对其进行标记,也就是对验证码重命名:

Keras深度学习 83万+

算法设计基础——动态规划法

斐波那契数列递归求解的过程类似二叉树的后序遍历,先求左子树,再求右子树,最后得到原结点,如上图,在getFibo(5)中左子树求解完getFibo(3)后,右子树getFibo(3)可以直接从表中取出该问题的解,无需再次计算,getFibo(4)也是同理,这样的执行过程就相当于剪去了右子树,只计算左子树,使得时间复杂度规模直接从O(2^n)直接降到O(log2(2^n)),即O(n),提升时非常巨大的。此外,动态规划法的填表也使得算法减少了很多重复的计算,避免了分治法的缺点。直到0到1、0到2、0到3。

linzixi0220的博客 638

(篇八)C语言在母串删子串、输入位置截取子串

文章目录一、字符串二、删除指定的字符三、从母串中截取子串四、输入位置截取子串 本篇主要介绍C语言字符串中的相关操作,然后分析两个C语言实例——在母串中指定删除子串、在母串中截取子串 一、字符串 了解C 语言的都知道,C语言中没有字符串类型,所以C语言是用字符串常量、字符指针、字符数组来表示字符串。这些字符串都是以 NULL、’\0’或者ASCII==0来结尾。说白了就是一个个字符组成一串有序序列,...

Viewinfinitely的博客 1512

基于Simulink的超级电容快速响应特性建模与仿真

本文介绍了基于Simulink的超级电容快速响应特性建模与仿真方法。主要内容包括:超级电容的工作原理、一阶RC等效电路模型及其动态电压方程;通过Simulink搭建超级电容模型的两种方法(Simscape Electrical推荐方案和基础模块透明教学方案);仿真100A×100ms放电脉冲下的电压响应特性,并与锂电池进行动态对比;分析超级电容在混合储能系统中的功率分配优势。文章还提供了工程实践要点和扩展方向,如电压均衡、温度影响评估以及与DC-DC变换器集成等。通过建模实践,验证了超级电容在毫秒级响应、高

xiaoheshang_123的博客 98

分治法-斐波那契数列

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

忧郁王子的专栏 372

彻底讲透 SAP 中的 client-safe:从 CDS、AMDP 到 ABAP Cloud 的客户端隔离设计

SAP系统中的client-safe概念定义了技术边界:访问client-dependent数据的对象必须确保只看到单个client数据,而访问client-independent数据的对象则天然满足条件。这一原则直接影响CDS视图、AMDP等核心组件,并与ABAP Cloud开发模型紧密集成。在业务系统中,client isolation要求用户只能看到当前登录client的数据。SAP通过语言版本、对象规则和静态检查强制执行这一约束,特别是在ABAP Cloud开发中,AMDP方法和发布的API必须满足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3269

分治法求Fibonacci(斐波那契)数列 & 详细代码

分治法求Fibonacci(斐波那契)数列 & 详细代码

qq_52839422的博客 3803

【29】软考软件设计师——SQL语句编写与优化深度精讲|数据库大题延伸满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第29篇,承接第28篇ER图转关系模式核心内容,作为**下午第2题数据库大题核心延伸必考模块**,单模块累计占分5~8分,是数据库板块性价比极高的提分重点。全文超4000字深度拆解软考全部SQL高频考点:全覆盖多表连接底层逻辑、嵌套子查询分类实操、GROUP BY分组聚合硬核规则、索引全品类设计原理、联合索引最左匹配底层机制,搭配海量可直接复刻的考场SQL模板、历年真题完整改写案例、索引失效场景实操复盘、慢查询优化落地技巧。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 527

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

分治策略——斐波那契数列

/** * 斐波那契数列是 * f(0)=0 n=0 * f(1)=1 n=1 * f(n-1)+f(n-2) n>1 * * 如果采用递归求数列,有很多数字需要重复计算多次,采用分治法可以避免重复计算, * 使计算的时间复杂段由指数级变为线性的O(n) * */ ...

aiij13476的博客 1152

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分治法与动态规划求解斐波那契数列

分治法和动态规划相同点在于二者都需要将原问题划分为一些个子问题,且子问题与原问题一样只是规模更小,然后递归地求解出子问题合并后得到原问题的解。其不同点在于分治法将分解出的子问题看成独立的存在,分别求解(公共子问题存在重复求解),而动态规划将子问题解保存到表格中,遇到公共子问题只需求解一次,以后可以中表格中查找子问题的解。 分治法求解问题分为3步: 分解:将问题划分为一些子问题,子问题的

且行且珍惜 6962

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

算法设计与分析——分治算法-计算Fibonacci数列

分治算法-计算Fibonacci数列 实验目的 通过朴素递归算法、自底向上算法和分治算法的比较理解如何利用分支思想设计一个高效算法。 实验内容 编写函数实现用朴素递归算法计算Fibonacci数列; 编写函数实现用自底向上算法计算Fibonacci数列; 编写函数实现用分治算法计算Fibonacci数列; 测试n取10、40、45...

shinian_acmer的博客鸭 3858

C++实现斐波那契的三种方法

题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 做题链接:力扣–斐波那契数 1.法一:迭代 class Solution

赵铁蛋的博客 9874

用分治法解决青蛙跳问题(斐波那契数列)

1、问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法?(先后次序不同算不同的结果) 2、基本思想 1)如果只有1级台阶,那显然只有一种跳法 2)如果有2级台阶,那么就有2种跳法,一种是分2次跳。每次跳1级,另一种就是一次跳2级 3)如果台阶级数大于2,设为n的话,这时我们把n级台阶时的跳法看成n的函数,记为f(n) 寻找问题与子问题之前的关系:...

wmy01234的博客 995

分治法之斐波拉契数列

文章目录斐波拉契数列一、问题描述二、代码实现2.打印结果下一篇 斐波拉契数列 一、问题描述 假设一对出生兔子要一个月才到成熟,而一堆成熟兔子每个月会生一对小兔子,那么从一对初生兔子开始 假设所有兔子不死,请计算n个月后兔子对数? 二、代码实现 代码如下: # -*- coding: utf-8 -*- """ Created on Sat Nov 13 12:20:34 2021 @author: lenovo 问题描述; 假设一对出生兔子要一个月才到成熟,而一堆成熟兔子每个月会生一对小兔子,那么从一

qq_48959845的博客 426

C/C++ 实现求Fibonacci数列

C/C++ 实现求 Fibonacci数列

m0_54158068的博客 3044

【C++】C++斐波那契数列算法

1.问题描述 以知斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n ≥ 2,n ∈ N*)。那么F(100)为多少? 2.思路:根据斐波那契公式,后一项为前两项之和,第0项为0,第一项为1。解决这类问题一般用循环或递归的方式。递归的重点是设置好出口,即结束条件。 3.代码奉上: #include<iostream> using name

telescope_U的博客 6617

pip下载提速——三种方式 配置pip服务器

目录pip下载提速——三种方式配置pip服务器方法1. 包名前手动添加镜像地址方法2.1 更改默认pip服务器地址(亲测有效)方法2.2 更改默认pip服务器地址方法3. 通过搜索引擎下载 pip下载提速——三种方式配置pip服务器 方法1. 包名前手动添加镜像地址 推荐镜像地址(module代表包名): pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ module pip install -i https://pypi.douban.c

Xav Pun的博客 2164

【剑指offer】 斐波那契数列 C++实现

题目描述 写一个函数,输入 n, 求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: 递归求解 求解F(n),必须先计算F(n-1)和F(n-2),计算F(n-1)和F(n-2),又必须先计算F(n-3)和F(n-4)。。。。。。以此类推,直至必须先计算F(1)和F(0),然后逆推得到F(n-1)和F(n-2)的结果,从而得到F(n)要计算很多重复的值,在时间上造成了很大的浪费,算法的时间复杂度随着N的增大呈现指数增长,时间的复杂度为O(2^n),即2的n次方 #include

Borrr的博客 839

递归分治(斐波那契数列、全排列、n皇后)

求斐波那契数列第n项的值 #include <cstdio> int F(int n) { if (n == 0 || n==1) return 1; else { return F(n - 1) + F(n - 2); } } int main() { int n; scanf("%d", &n); int re = F(n); printf("%d", re); return 0; } 全排列 const int maxn = 11; int n, P[

kiss_the_rian的博客 415
上一篇: PAT A1067. Sort with Swap(0,*) (25)
DemonInside
博客等级 码龄10年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值