第六章 数学问题 -------- 6.14 【快速幂】斐波那契数列

acwing算法提高课 包括Flood Fill、最短路模型、多源BFS、最小步数模型、双端队列广搜、双向广搜、A*、DFS之连通性模型、DFS之搜索顺序、DFS之剪枝与。包括筛质数、分解质因数、快速幂、约数个数、欧拉函数、同余、矩阵乘法、组合计数、高斯消元、容斥原理、概率与数学期望、博弈论等内容。包括数字三角形模型、最长上升子序列模型、背包模型、状态机、状态压缩DP、区间DP、树形DP、数位DP、单调队列优化DP、斜率优。约束、最近公共祖先、强连通分量、双连通分量、二分图、欧拉回路和欧拉路径、拓扑排序等内容。 阅读详情

快速幂运算:

  快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下:

  假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时:

     a11=a(2^0+2^1+2^3)

  11的二进制是1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,因此,我们将a¹¹转化为算式 a2^0*a2^1*a2^3,也就是a1*a2*a8 ,看出来快的多了吧原来算11次,现在算三次,其中a1  a2  a8的计算方式代码注释里面写着。

  代码:

public class NExponent {

    public static void main(String[] args) {
        System.out.println(ex2(2, 3));
    }
    
    public static int ex(int a,int n){
        if(n==0)return 1;
        if(n==1)return a;
        int temp = a; // a的1次方
        int res = 1;
        int exponent = 1;
        while((exponent<<1)<n){
            temp = temp * temp;
            exponent = exponent << 1;
        }
        res *= ex(a,n-exponent);
        return res * temp;
    }
    
    /**
     * 快速幂  O(lgn)
     */
    public static long ex2(long n,long m){
        if(n==0) return 1;
        long pingFangShu = n; // n 的 1 次方
        long result = 1;
        while (m != 0) {
            // 遇1累乘现在的幂
            if ((m & 1) == 1)
                result *= pingFangShu;
            // 每移位一次,幂累乘方一次
            pingFangShu = pingFangShu * pingFangShu;
            // 右移一位
            m >>= 1;
        }
        return result;
    }
}

题目:矩阵快速幂求解斐波那契数列

  代码:

public class Fib {

    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            System.out.print(fib(i)+" ");
        }
    }
    
    // 矩阵运算求解斐波那契数列
    static long fib(long n){
        if (n == 1 || n == 2) return 1;
        long[][] matrix = { 
                { 0, 1 }, 
                { 1, 1 } 
                };
        long[][] res = matrixPower(matrix, n - 1);// 乘方
        res = matrixMultiply(new long[][] { { 1, 1 } }, res);// 矩阵相乘
        return res[0][0];
    }
    
    public static long[][] matrixPower(long[][] matrix, long p) {
        // 初始化结果为单位矩阵,对角线为1
        long[][] result = new long[matrix.length][matrix[0].length];
        // 单位矩阵,相当于整数的1
        for (int i = 0; i < result.length; i++) {
            result[i][i] = 1;
        }

        // 平方数
        long[][] pingFang = matrix; // 一次方
        while (p != 0) {
            if ((p & 1) != 0) { // 当前二进制位最低位为1,将当前平方数乘到结果中
                result = matrixMultiply(result, pingFang);//
            }
            // 平方数继续上翻
            pingFang = matrixMultiply(pingFang, pingFang);
            p >>= 1;
        }
        return result;
    }
    
    /**
     * 矩阵乘法 矩阵1为n*m矩阵,矩阵2为m*p矩阵 结果为n*p矩阵
     */
    public static long[][] matrixMultiply(long[][] m1, long[][] m2) {
        final int n = m1.length;
        final int m = m1[0].length;
        if (m != m2.length)
            throw new IllegalArgumentException();
        final int p = m2[0].length;

        long[][] result = new long[n][p];// 新矩阵的行数为m1的行数,列数为m2的列数

        for (int i = 0; i < n; i++) {// m1的每一行
            for (int j = 0; j < p; j++) {// m2的每一列
                for (int k = 0; k < m; k++) {
                    result[i][j] += m1[i][k] * m2[k][j];
                }
            }
        }
        return result;
    }

}

  结果:

FPGA纯Verilog实现I²C主机控制器与EEPROM读写 I²C是一种广泛应用的同步串行总线协议,用于连接微控制器与EEPROM、传感器等低速外设。其核心原理包括开漏结构、主从通信机制、START/STOP时序及ACK/NACK应答流程。技术价值在于硬件资源占用少、布线简洁、支持多从机扩展,特别适合FPGA嵌入式系统中轻量级外设控制。典型应用场景涵盖工业数据存储、配置参数持久化及实时传感器接口。本文基于Xilinx Spartan-6 FPGA,采用纯Verilog HDL实现参数化I²C主机控制器与AT24C02 EEPROM读写验证,深入解析状态机设计、SDA 阅读详情

相关推荐

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现

本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。

weixin_29232121的博客 148

C/C++快速幂

int qm(int a, int b) { int ans = 1; while (b) { if (b & 1)ans *= a; a *= a; b >>= 1; } return ans; } 快速幂原理 底数a变大

m0_51486634的博客 190

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 367

快速幂 c++

转自:http://www.cnblogs.com/CXCXCXC/p/4641812.html 快速幂这个东西比较好理解,但实现起来到不老好办,记了几次老是忘,今天把它系统的总结一下防止忘记。   首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如...

Zyy~的博客 560

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 129

EB Tresos激活失败?3种实用解决方案帮你搞定(含离线激活步骤)

本文针对EB Tresos软件激活失败问题,提供了三种实用的解决方案。详细分析了激活失败的常见根源,并系统阐述了在线环境下的排查步骤、无网环境下的离线激活全流程,以及高级许可证环境修复方法,帮助汽车电子工程师快速恢复开发环境。

milk8的博客 609

快速幂——数学知识(c++)

快速幂的目的就是做到快速求幂 假设我们要求ab,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下: 假设我们要求ab,那么其实b是可以拆成二进制的,该二进制数第i位的权为2(i-1),例如当b==11时 a11=a(20+21+23) 11的二进制是1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,因此,我们将a¹¹转化为算 a20*a21*a23,也就是a1*a2*a8 ,看出来快的多了吧原来算11次

Annabel_CM的博客 592

深入解析EDID中Display Descriptor Block的配置技巧与实战应用

本文深入解析EDID中Display Descriptor Block的配置技巧与实战应用。通过剖析像素时钟、有效像素、消隐区与同步脉冲等核心参数,并结合1280x720@60Hz的实战配置案例,指导开发者如何正确为定制硬件或非标准显示器编写“身份证”,避免黑屏、分辨率异常等问题,确保显示设备完美点亮。

1a2s3d4f5g的博客 879

快速幂

快速幂的目的是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了很多。 当b=11时,b的二进制:1011,。 &运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位。还可以判断奇偶x&1==0为偶,x&1==1为奇。 幂运...

diaozeqi6995的博客 167

92. SAP ABAP 系统里长文本 Long Text 的设计和读取函数 READ_TEXT 的详细讲解

SAP ABAP中的长文本(Long Text)是指在SAP系统中存储和管理较长文本信息的一种机制。长文本通常用于存储描述性信息、注释、说明等,这些文本信息可能超过了标准数据库表字段的长度限制。 长文本的作用主要有以下几点: 1. 更多的信息存储:长文本允许您存储和显示比标准表字段允许的更多信息。例如,产品描述、用户注释、维护计划等可能需要大量的文本来详细描述。 2. 更好的可读性:长文本提供了更好的文本格式化选项,可以改善可读性。用户可以使用段落、列表、字体样式等格式化文本,以便更容易地理解和阅读。

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

6、基因组数据可视化与甲基化分析:从基础操作到深入洞察

本文详细介绍了基因组数据可视化和全基因组DNA甲基化分析的方法和技术,包括基因组查看器(IGV)的基本操作、单核苷酸变异的可视化、DNA甲基化与CpG岛的关联分析、统计建模与显著甲基化区域识别,以及不同细胞系之间的甲基化模式差异分析。通过具体案例展示了如何利用MATLAB进行数据分析和可视化,为基因组研究、疾病机制探索及个性化医疗提供了技术支撑和实践参考。

qsc901234的博客 295

关于矩阵快速幂的学习总结

#include <bits/stdc++.h> using namespace std; const long long MOD = 1e9+7; struct Matrix { long long a[3][3]; Matrix() { memset(a, 0, sizeof(a)); } Matrix operator*(const Matrix &b) const { Matrix res; .

qq_60958786的博客 147

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1898

计算机考研机试攻略

目录 写在前面的话 2 关于N诺 4 如何使用本书? 5 第一章 从零开始 8 1.1机试分析 8 1.2 IDE的选择与评测结果 10 1.3 DreamJudge的使用 11 1.4输入输出技巧 12 1.5头文件技巧 15 1.6数组使用技巧 16 1.7审时度势 — 复杂度与是否可做 19 1.8 C++ STL的使用 21 1.9多组输入的问题 27 第...

3023

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机考研机试攻略 - 高分篇

目录 第一章 从零开始 1.1机试分析 1.2 IDE的选择与评测结果 1.3 DreamJudge的使用 1.4输入输出技巧 1.5头文件技巧 1.6数组使用技巧 1.7审时度势 — 复杂度与是否可做 1.8 C++ STL的使用 1.9多组输入的问题 第二章 入门经典 2.1 简单模拟 2.2 进制转换类问题 2.3 排版类问题 2.4 日期类问题 2.5 ...

1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

机试记不住头文件_计算机考研机试攻略

目录写在前面的话 2关于N诺 4如何使用本书? 5第一章 从零开始 81.1机试分析 81.2 IDE的选择与评测结果 101.3 DreamJudge的使用 111.4输入输出技巧 121.5头文件技巧 151.6数组使用技巧 161.7审时度势 — 复杂度与是否可做 191.8 C++ STL的使用 211.9多组输入的问题 27第二章 入门经典 292.1 简单模拟 302.2 进制转换类问...

weixin_39643255的博客 199

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【计算机考研机试指南】第六章 数学问题:快速幂——人见人爱A^B

int FastExponentiation(int a, int b, int mod){ int answer = 1; while(b != 0){ //不断将b 转换成二进制数 if(b % 2 == 1){ answer *= a; answer %= mod; //只求后三位 } b /= 2; a *= a; //a 不断平方 a %= mod; } return answer; } #include <iost..

weixin_44566432的博客 250

【每日算法】快速幂

数值的整数次方实现函数double Power(double base, int n) 求base的n次方,不得使用库函数,同时不需要考虑大数问题。Tips问题本身很直观,但是越简单的题越需要细心思考,包括边界问题和效率问题,如果不能考虑到以下3点,就无法给出令人满意的答案: 考虑n为负数的情况; 考虑base为0的情况; 当n较大时,如何保证效率? 分析针对上面3个问题,我们逐一解答:1.在计算

jiange_zh的博客 6465

leetcode 50 Pow(x n)

leetcode 50 题解 快速幂学习 方案一 暴力直接循n次 ---- 毫无意外TLE class Solution { public: double myPow(double x, int n) { double res=1.0; if(n>=0) { while(n>0){ res=res*x; n--; co

weixin_42808534的博客 245

对快速幂的理解(C++)

快速幂的目的是做到 快速求幂 举个栗子!!! 我们要计算a^b -------朴素算法是把a连乘b次 时间复杂度是O(n)级别,而快速幂能做到O(logn) 好 继续看---- 求a^b: 其实b是可以拆成二进制的,该二进制数第i位的权(值)为2^(i-1), 比如说b==11时  11的二进制是1011, 11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1 之前提...

zzrp++的博客 496

【基础算法】4.快速幂算法

快速幂算法: leetcode题解原文链接 递归代码: 迭代代码:

MJ_Lee的博客 312

快速幂运算

首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下:   假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时                            a11=a(2^0+2^1+2^...

你超哥的博客 1365

从零构建对话式AI专属GUI:React+TypeScript实战指南

在现代软件开发中,图形用户界面是连接用户与后端服务的核心桥梁。其设计原理基于人机交互理论,通过组件化架构实现高效开发。技术价值在于提升用户体验、增强系统可控性,尤其在AI应用领域,定制化界面能更好地展示模型推理过程与多模态交互。应用场景广泛覆盖智能客服、专业助手、创意协作等需要深度交互的领域。本文以构建对话式AI专属界面为例,详细解析了基于React、TypeScript、Zustand的技术选型与实现方案,重点解决了流式响应、消息渲染、状态管理等工程挑战,为开发AI原生应用提供了完整的实战参考。

weixin_30732487的博客 681

快速乘法/幂 算法详解

快速乘法 快速幂 算法详解 数论,位运算 适用范围:快速计算a*b % mod的结果,或者快速计算a^b % mod 的结果,时间复杂度大大降低。 算法描述:首先你可能会问a*b不是直接乘就出来了么,为什么需要快速算法?但是乘法在计算机中处理的时间并不是这么快的,也要拆分为加法来做的。所以快速乘法会更快的计算a*b的结果。

JUST CODE 1万+

快速求幂

首先,快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下:   假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1)   例如当b==11时 , a^11=a^(2^0+2^1+2^3),11的二进制是1011,11 = 2³×1

LearningNote 276

程序设计中的计算复用(Computational Reuse)

从斐波那契数列说起 我想几乎每一个程序员对斐波那契(Fibonacci)数列都不会陌生,在很多教科书或文章中涉及到递归或计算复杂性的地方都会将计算斐波那契数列的程序作为经典示例。如果现在让你以最快的速度用C#写出一个计算斐波那契数列第n个数的函数(不考虑参数小于1或结果溢出等异常情况),我不知你的程序是否会和下列代码类似: public static ulong Fib(ulong n) ...

weixin_34212189的博客 217
上一篇: 第六章 数学问题 ----------6.13 素数的筛法(第十万零二个素数)
下一篇: 第七章 递归、DFS、剪枝、回溯等问题 ------------- 7.3 题解:机器人走方格问题
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值