斐波那契(快速矩阵幂)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

斐波那契数列就是前面俩个数字相加,例如1,1,2,3,5,8,11...

(前面俩个1要相等


提示:以下是本篇文章正文内容,下面案例可供参考

一、斐波那契数列代码

java 复制代码
public class FibonacciSeries {  
    public static void main(String[] args) {  
        int n = 10; // 你可以改变这个值来计算斐波那契数列的前n个数  
        printFibonacciSeries(n);  
    }  
  
    public static void printFibonacciSeries(int n) {  
        int t1 = 0, t2 = 1;  
        System.out.print("斐波那契数列的前 " + n + " 个数是:");  
  
        for (int i = 1; i <= n; ++i) {  
            System.out.print(t1 + " ");  
            int sum = t1 + t2;  
            t1 = t2;  
            t2 = sum;  
        }  
    }  
}

二、矩阵快速幂(斐波那契)

AcWing 1305. 1303. 斐波那契前 n 项和

前面这个base是指的是(fn,f(n+1),Sn))

res是推出来的公式,由于矩阵乘法中,是列*行=得到的数;

代码如下(示例):

c 复制代码
public class Main{
    static int m ;
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        m = input.nextInt();
        //1 1 2  3
        long[][] matrix = cal(n-1);
        // for(int i = 0 ; i < 3 ; i++){
        //     System.out.println(Arrays.toString(matrix[i]));
        // }
        long res = 0;
        for(int i = 0 ; i < 3 ; i++){
            res = (res + matrix[i][2]) % m;
        }
        System.out.println(res);

    }
    public static  long[][] cal(int n ){
        long[][] base = {{0,1,0},{1,1,1},{0,0,1}};
        long[][] res = {{1,0,0},{0,1,0},{0,0,1}};
        while(n > 0){
            if((n & 1) == 1){
                res = multi(res,base);
            }
            n = n >> 1;
            base = multi(base,base);
        }
        return res;
    }
    public static long[][] multi(long[][] A,long[][] B){
        long[][] res = new long[A.length][B[0].length];
        for(int i = 0 ; i < A.length ; i++){
            for(int j = 0 ; j < B[0].length ; j++){
                for(int k = 0 ; k < A[0].length ; k++){
                    res[i][j] = (res[i][j] + A[i][k] * B[k][j]) % m;
                }
            }
        }
        return res;
    }
}

相关推荐
Coder码匠10 分钟前
Dockerfile 优化实践:从 400MB 到 80MB
java·spring boot
漫随流水14 分钟前
leetcode算法(111.二叉树的最小深度)
数据结构·算法·leetcode·二叉树
李慕婉学姐7 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
じ☆冷颜〃8 小时前
黎曼几何驱动的算法与系统设计:理论、实践与跨领域应用
笔记·python·深度学习·网络协议·算法·机器学习
数据大魔方8 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
POLITE38 小时前
Leetcode 23. 合并 K 个升序链表 (Day 12)
算法·leetcode·链表
楚来客8 小时前
AI基础概念之八:Transformer算法通俗解析
人工智能·算法·transformer
Echo_NGC22379 小时前
【神经视频编解码NVC】传统神经视频编解码完全指南:从零读懂 AI 视频压缩的基石
人工智能·深度学习·算法·机器学习·视频编解码
会员果汁9 小时前
leetcode-动态规划-买卖股票
算法·leetcode·动态规划
奋进的芋圆9 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq