斐波那契(快速矩阵幂)

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

文章目录


前言

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

斐波那契数列就是前面俩个数字相加,例如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;
    }
}

相关推荐
春生野草2 分钟前
启动Nginx
java·微服务·架构
悟空CRM服务6 分钟前
开源的力量:如何用开源技术构建高效IT架构?
java·人工智能·架构·开源·开源软件
@宁兰24 分钟前
算法实现总结 - C/C++
c语言·c++·算法
神仙别闹25 分钟前
基于SpringMVC+Spring+MyBatis开发的个人博客网站
java·spring·mybatis
华仔啊1 小时前
MyBatis-Plus 不只是简化CRUD!资深架构师总结的15个高阶用法
java·后端·mybatis
Doro再努力1 小时前
2025_11_14洛谷【入门1】数据结构刷题小结
前端·数据结构·算法
蒙奇D索大1 小时前
【算法】回溯算法精讲:从深度优先搜索到剪枝优化
经验分享·笔记·算法·深度优先·剪枝·改行学it
QTreeY1231 小时前
yolov5/8/9/10/11/12/13+deep-oc-sort算法的目标跟踪实现
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
_OP_CHEN1 小时前
算法基础篇:(六)基础算法之双指针 —— 从暴力到高效的优化艺术
c++·算法·acm·优化算法·双指针·oj题·算法蓝桥杯
cs麦子1 小时前
C语言--详解--指针--下
c语言·数据结构·算法