斐波纳契数列(f(n)=f(n-1)+f(n-2))问题

2023-11-03

\because f(n)=1\cdot f(n-1)+1\cdot f(n-2)

\begin{bmatrix} 1 &1 \\ 1& 0 \end{bmatrix}^{n-2}

package org.nxt.algorithm.series;

import java.math.BigInteger;

/**
 * fibonacci series
 * @author nanxiaotao
 *
 */
public class FibonacciSeries {
	
	private static BigInteger[][] matrix(BigInteger[][] arrLeft, BigInteger[][] arrRight){
	        BigInteger result[][] = {{new BigInteger("0"),new BigInteger("0")},{new BigInteger("0"),new BigInteger("0")}};
	        for (int i = 0; i <= 1; i++){
	            for (int j = 0; j <= 1; j++){
	                result[i][j] =  arrLeft[i][0].multiply(arrRight[0][j]).add(arrLeft[i][1].multiply(arrRight[1][j]));
	            }
	        }
	        return result;
	    }
	 
	 
	 
	private static BigInteger[][] square(BigInteger [][] arrIn){
	        BigInteger result[][] = {{new BigInteger("0"),new BigInteger("0")},{new BigInteger("0"),new BigInteger("0")}};
	 
	        BigInteger [][] arrLeft = arrIn;
	        BigInteger [][] arrRight = arrIn;
	 
	        if (arrIn != null){
	            for (int i = 0; i <= 1; i++){
	                for (int j = 0; j <= 1; j++){
	                    result[i][j] =  arrLeft[i][0].multiply(arrRight[0][j]).add(arrLeft[i][1].multiply(arrRight[1][j]));
	                }
	            }
	        }
	        return result;
	}
	 
	 
	   private static BigInteger[][] matrixFast(BigInteger[][] arrIn, int n){
	        BigInteger result[][] = arrIn;
	        BigInteger tmp[][] = {{new BigInteger("1"),new BigInteger("0")},{new BigInteger("0"),new BigInteger("1")}};//初始值为单位阵
	        while (n != 0){
	            if ((n & 1) == 1){
	                tmp = matrix(tmp.clone(), result);
	                result = square(result.clone());
	                n = n >> 1;
	            }else {
	                result = square(result.clone());
	                n = n>>1;
	            }
	        }
	        return tmp;
	    }
	 
	   
	   public static BigInteger computeN(int n) {
		   BigInteger arrIn[][] = {{new BigInteger("1"),new BigInteger("1")},{new BigInteger("1"),new BigInteger("0")}};
	       BigInteger res[][] = matrixFast(arrIn, n);
	       return res[0][0];
	   }
	 
	    public static void main(String[] args) {
	        System.out.println(computeN(6));
	    }



}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

斐波纳契数列(f(n)=f(n-1)+f(n-2))问题 的相关文章

随机推荐

  • vi中不区分大小写查找的两种方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在 vim中 进行关键字查找 如果内容中分了大小写的 那么 查找默认是区分了大小写的 比如 ssh的配置文件中 etc ssh sshd config中 要去禁用 root
  • sqlserver存储过程加密和解密

    加密存储过程 IF EXISTS SELECT name FROM sysobjects WHERE name encrypt this AND type P DROP PROCEDURE encrypt this GO USE pubs
  • Python 在 JMeter 中如何使用?

    要在JMeter中使用Python 需要使用JSR223 Sampler元素来执行Python脚本 使用JSR223 Sampler执行Python脚本时 需要确保已在JMeter中配置了Python解释器 并设置了正确的环境路径 1 确保
  • 性能测试-JMeter分布式测试及其详细步骤

    性能测试概要 性能测试是软件测试中的一种 它可以衡量系统的稳定性 扩展性 可靠性 速度和资源使用 它可以发现性能瓶颈 确保能满足业务需求 很多系统都需要做性能测试 如Web应用 数据库和操作系统等 性能测试种类非常多 有些概念也很相近 Lo
  • 如何编写一个完整的Linux命令

    作者 gzshun 原创作品 转载请标明出处 来源 http blog csdn net gzshun 一个完整的Linux命令需要有以下几个重要的部分组成 1 使用方法 2 命令行参数 3 移植性 1 使用方法 在每个命令当中 都需要提供
  • uniapp开发小程序,上传图片和视频功能

    1 需求 可以上传图片和视频 并且都可以删除 图片可以预览 2 效果图 3 代码
  • JS金额千分位加逗号,多种实例

    涉及到金额展示的都需要在千分位上加逗号 以下为vue项目的实例 1 在main js下挂载一个全局方法 金额千分位加逗号 Vue prototype amountRule amount gt let defaultAmount let se
  • 初探生物信息数据库——生信原理第一次实验报告(华农)

    初探生物信息数据库 生信原理第一次实验报告 华农 1 实验目的 熟悉NCBI数据库Entrez检索系统 会使用关键词检索NCBI UnitProtKB PubMed等数据库 能理解检索结果页面各条目含义 2 实验题目与解答 2 1 水稻抗病
  • quartus18.1--下载设置

    一 quartus下载流程 1 打开Quartus工程 点击 Start Compilation 按钮进行程序全编译 如下图所示 2 程序全编译无错误 编译信息如下图所示 3 3 点击 Programmer 快捷按钮 进入程序下载页面 如下
  • git修改历史提交(commit)信息

    一 修改最近一次提交的commit信息 1 首先通过 git log 查看commit信息 2 使用指令 git commit amend 进入命令模式 修改号commit信息保存后退出编辑模式 3 git push force 到远程仓库
  • 基于C++的带权无向图的实现 (二)- 遍历算法

    该系列文章是本人整理的有关带权无向图的数据结构和算法的分析与实现 若要查看源码可以访问我的github仓库 如有问题或者建议欢迎各位指出 目录 基于C 的带权无向图的实现 一 数据结构 基于C 的带权无向图的实现 二 遍历算法 基于C 的带
  • AD10创建自己的元器件库——PCB设计第二节

    一 在自己的元器件库里面添加一个七段数码管 绘制七段数码管的原理图 1 新建一个元器件库 如图所示 2 在集成库中新建两个文件并命名保存 3 打开First Schlib1 SchLib文件 在第四象限绘制一个矩形 4 添加引脚 如图所示
  • Vue中引入外部字体

    项目开发过程中 系统自带的字体通常美观性没那么强 所以有时候就需要我们自己引入字体包 来实现各种个性字体的效果 以下就是在vue项目中如何引入外部字体包并使用的方法 一 放置字体包 在assets下创建一个font文件夹 把下载的字体文件放
  • 微信小程序卡券样式

    微信小程序卡券样式 微信小程序 卡券 html
  • AndroidManifest.xml中android:configChanges的简介

    程序在运行时 一些设备的配置可能会改变 如 横竖屏的切换 键盘的可用性等 这样的事情一发生 Activity会重新启动 其中的过程是 在销毁之前会先 called onSaveInstanceState 去保存你应用中的一些数据 然后cal
  • 文档开发中预览/编辑/格式转换/内容提取/语言识别/文件服务器/相关的开源/商业组件和库

    能用于项目开发的office文件功能 pageoffice 在线编辑office http www zhuozhengsoft com java WebOffice java jsp 在线编辑office 商业版贵 kkFileView 文
  • 【Rust 日报】2021-09-26 RustConf 2021 项目精选

    RustConf 2021 项目精选 以下项目来自 RustConf 2021 移动构造函数 有可能吗 自引用 类型是一种对自身引用的类型 异步 Features 是当今 Rust 中最常见的自引用类型 但是 它们不能在不使引用无效的情况下
  • 【Python 1-15】Python手把手教程之——详解类Class以及类的使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me 创建和使用类 使用类几乎可以模拟任何东西 下面来编写一个表示小狗的简单类Dog 它表示的不是特定的小狗 而是任何小狗 对于大多数宠物狗 我们都知道些什么呢 它们都有名字和年龄 我们还知
  • Scrapy笔记(2)- 完整示例

    这篇文章我们通过一个比较完整的例子来教你使用Scrapy 我选择爬取虎嗅网首页的新闻列表 这里我们将完成如下几个步骤 创建一个新的Scrapy工程 定义你所需要要抽取的Item对象 编写一个spider来爬取某个网站并提取出所有的Item对
  • 斐波纳契数列(f(n)=f(n-1)+f(n-2))问题

    package org nxt algorithm series import java math BigInteger fibonacci series author nanxiaotao public class FibonacciSe