首页 > 其他分享 >7-31打卡

7-31打卡

时间:2023-08-01 17:56:59浏览次数:33  
标签:matrix int 31 long static result 打卡 public

矩阵快速幂求斐波那契数列

快速幂
将指数n表示成二进制形式。
从二进制的最低位开始遍历,如果当前位为1,则累乘底数x;否则,不进行任何操作。
将底数x不断平方,并更新指数n为n的一半。
重复步骤2和步骤3,直到遍历完整个二进制表示。

public class FibonacciMatrix {
    public static void main(String[] args) {
        int n = 10; // 求第10个斐波那契数列的值

        long result = fibonacci(n);
        System.out.println("F(" + n + ") = " + result);
    }

    public static long fibonacci(int n) {
        if (n <= 0) {
            return 0;
        } else if (n == 1) {
            return 1;
        }

        // 定义初始矩阵
        long[][] baseMatrix = {{1, 1}, {1, 0}};

        // 使用矩阵快速幂算法求解矩阵的n次方
        long[][] resultMatrix = matrixPow(baseMatrix, n - 1);

        // 矩阵中的第一个元素就是F(n)
        return resultMatrix[0][0];
    }

    public static long[][] matrixPow(long[][] matrix, int n) {
        int rows = matrix.length;
        int cols = matrix[0].length;

        // 创建单位矩阵
        long[][] identityMatrix = new long[rows][cols];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                identityMatrix[i][j] = (i == j) ? 1 : 0;
            }
        }

        // 使用快速幂算法求解矩阵的n次方
        while (n > 0) {
            if (n % 2 == 1) {
                identityMatrix = matrixMultiply(identityMatrix, matrix);
            }
            matrix = matrixMultiply(matrix, matrix);
            n /= 2;
        }

        return identityMatrix;
    }

    public static long[][] matrixMultiply(long[][] A, long[][] B) {
        int rowsA = A.length;
        int colsA = A[0].length;
        int colsB = B[0].length;

        long[][] result = new long[rowsA][colsB];

        for (int i = 0; i < rowsA; i++) {
            for (int j = 0; j < colsB; j++) {
                for (int k = 0; k < colsA; k++) {
                    result[i][j] += A[i][k] * B[k][j];
                }
            }
        }

        return result;
    }
}

标签:matrix,int,31,long,static,result,打卡,public
From: https://www.cnblogs.com/wlxdaydayup/p/17598611.html

相关文章

  • 8-1打卡
    定义方式:接口:使用interface关键字定义,接口中可以包含抽象方法、默认方法(Java8及以后版本支持)、静态方法(Java8及以后版本支持)和常量(默认是publicstaticfinal修饰的)。抽象类:使用abstract关键字定义,抽象类可以包含抽象方法和普通方法,可以有构造方法和成员变量。继承:Java接口......
  • css的inline-block布局方式对齐问题 —— 转载自 article/2023/7/31 16:26:21
    css的inline-block布局方式对齐问题今天在实现百度前端技术学院的如下案例时遇到了div上下对齐问题。针对如下左右两栏布局,本来使用将两栏各自div的display设置为inline-block方式来实现,为了左边高度与右边对齐,直接量出右边div按照像素高度赋给左边。但是左边元素竟然出现在了......
  • 2023-07-31
    DevEcoStudio环境配置问题:第一次安装时是根据官网最新教程来的,选择的环境只支持AdkTS语言,因此需要下载支持java开发的JDK。尝试:下载API6(其实4到7都支持Java)结果:下载失败尝试:浏览器直接搜索相关报错情况,,没有找到合适的解决方案再尝试:在华为智能客服里选择鸿蒙开发相关的咨......
  • 7.31 学习shell脚本
    shell定义:是一个语言解释器,将命令转化为二进制语言(机器语言)shell脚本window是.batlinux是.sh格式规范#!/bin/bash开头文件程序/bin/sh,也就是bash解释器。#!/usr/bin/python运行shell脚本的方式1.bashscript.shshscript.sh适用于文件本身没权限运行2.使用相......
  • 链表双指针技巧汇总 [labuladong-刷题打卡 day1]
    双指针合并21.合并两个有序链表比较简单的双指针比较算法,两个指针分别指向待合并链表/序列,比较后选择符合条件的指针移动Trick:链表在实现时,带头节点的链表在操作中更方便题解/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNo......
  • TR 31 Key block decode
    KBPK(ZMK): C1293E2C4A2F4073162CD0C2A8D5C8529D200BFD327CF48CWithKBPK,wecangetKBEKandKBAKKBEK: C1293E2C4A2F4073162CD0C2A8D5C8529D200BFD327CF48CXOR454545454545454545454545454545454545454545454545= 846C7B690F6A053653699587ED908D17D8654EB87739B1C9......
  • 7.31
    Java泛型Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组......
  • 2023.7.31
    今天是七月的最后一天,最近天天下大雨,很少出门了,就在家里简单的吃点,早上雨水刮进来把床垫打湿了,直接被弄醒了,无奈地收拾好把被子晾上,稍微看了看视频,有些无趣,就继续完善之前搭建的网页,还是无聊,只能看看小说,看到下午,晚上做了几个pta题就休息了。......
  • 2023.7.31
    今天去看SROP的时候,发现ctfwiki上有一些细节上的东西,之前以为懂了,但是去理整个过程的时候发现还存在一些问题,目前结合题目里代码的实际情况弄懂了一些,中间还去看了一些博客,弄懂了了里面的exp。但是ctfwiki上的还有一点问题。我尽量学......
  • 7.31
    《大道至简》是一本关于人生哲学的书籍,作者通过讲述自己的人生经历和思考,探讨了人生的真谛和生活的意义。读完这本书,我深受启发和感动。书中作者提到了“大道至简”的概念,他认为人生的真正意义在于追求简单和平静。在这个繁忙和喧嚣的世界中,我们常常被各种琐事和压力所困扰,很难找......