Java数据结构之快速幂的实现

Java数据结构之快速幂的实现

简介

快速幂算法是计算 a 的 n 次方时经常使用的一种算法,其时间复杂度为 O(logn),相比直接计算 a^n 的时间复杂度 O(n) 要更加高效。

实现过程

public class FastPower {

    /**
     * 快速幂算法
     *
     * @param base     底数
     * @param exponent 指数
     * @param modulus  取模数
     * @return 计算结果
     */
    public static long fastPower(long base, long exponent, long modulus) {
        long result = 1;
        while (exponent > 0) {
            if ((exponent & 1) == 1) {
                result = (result * base) % modulus;
            }
            base = (base * base) % modulus;
            exponent >>= 1;
        }
        return result;
    }
}

上述代码实现了一个快速幂算法的静态方法 fastPower。其中,base 表示底数,exponent 表示幂,modulus 表示取模数。实现过程如下:

  1. 初始化 result 为 1。
  2. 当 exponent 大于 0 时,进入循环。
  3. 如果 exponent 的最后一位是 1(即 exponent & 1 == 1),则将 result 乘以 base 并对 modulus 取余。
  4. 将 base 的值平方,并对 modulus 取余。
  5. 将 exponent 右移一位(即除以 2)。
  6. 重复第 2 步至第 5 步,直至 exponent 的值变为 0。
  7. 返回 result。

示例说明

示例一

计算 2 的 10 次方对 1000000007 取模的结果。

long result = FastPower.fastPower(2, 10, 1000000007);
System.out.println(result); // 输出结果为 1024

首先,我们初始化 base 为 2,exponent 为 10,modulus 为 1000000007,然后进入循环:

exponent base result
10 2 1
5 4 1
2 16 4
1 256 4
0 65536 1024

最终得出 2 的 10 次方对 1000000007 取模的结果为 1024。

示例二

计算 7 的 37 次方对 13 取模的结果。

long result = FastPower.fastPower(7, 37, 13);
System.out.println(result); // 输出结果为 9

初始化 base 为 7,exponent 为 37,modulus 为 13,然后进入循环:

exponent base result
37 7 1
18 10 7
9 9 0
4 3 0
2 9 0
1 3 0
0 1 9

最终得出 7 的 37 次方对 13 取模的结果为 9。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据结构之快速幂的实现 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 实现CSS圆环的5种方法(小结)

    实现CSS圆环的5种方法(小结) 在CSS中,我们可以使用不同的方法来创建圆环效果。下面是实现CSS圆环的5种方法的详细攻略: 方法一:使用border属性 .circle { width: 100px; height: 100px; border: 10px solid #000; border-radius: 50%; } 这种方法使用border属性来…

    other 2023年7月28日
    00
  • jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较

    为了在页面加载时添加加载中效果,我们可以使用jQuery Mobile提供的”loading”插件。该插件会在页面上显示一个加载中的图标动画,直到页面的所有资源(包括外部CSS和JavaScript文件)加载完成,然后再隐藏加载中的图标。在使用该插件时,需要注意jQuery Mobile的生命周期事件顺序。 jQuery Mobile的生命周期事件顺序是: …

    other 2023年6月25日
    00
  • WordPress的6种主题框架对比分析

    WordPress的6种主题框架对比分析攻略 1. 引言 在选择适合自己的WordPress主题框架时,了解不同框架的特点和优势是非常重要的。本攻略将介绍WordPress的6种主题框架,并对它们进行详细的对比分析。 2. 主题框架一:Genesis Framework Genesis Framework是一款非常受欢迎的WordPress主题框架,它的特点…

    other 2023年7月27日
    00
  • iOS开发者看过来 最全HomeKit用户界面使用指南

    iOS开发者看过来:最全HomeKit用户界面使用指南 HomeKit是Apple专为智能家居设备打造的一套开发框架,通过HomeKit,用户可以通过Siri语音控制智能硬件设备,构建智能家居系统。本文将详细讲解HomeKit的用户界面使用指南,让iOS开发者快速上手。 1. 介绍HomeKit用户界面 HomeKit的用户界面主要分为以下部分: 1.1 R…

    other 2023年6月26日
    00
  • Linux下Makefile的automake生成全攻略

    下面是关于Linux下Makefile的automake生成全攻略的详细讲解。 1. Makefile 和 automake 的概念说明 Makefile 是一种文件格式,使用 make 命令可以根据 Makefile 中的规则来编译、构建和安装程序。Makefile 是一种类似于脚本的东西,可以自动化完成工作,比手工编写命令方便得多。 automake 是…

    other 2023年6月26日
    00
  • 利用Builder方式创建对象示例代码

    利用Builder方式创建对象示例代码的完整攻略 Builder模式是一种创建对象的设计模式,它通过链式调用一系列的方法来设置对象的属性,并最终构建出一个完整的对象。以下是一个示例代码,演示了如何使用Builder方式创建对象: 示例1:创建一个Person对象 public class Person { private String name; priva…

    other 2023年10月14日
    00
  • PostgreSQL数据库服务端监听设置及客户端连接方法教程

    下面是关于“PostgreSQL数据库服务端监听设置及客户端连接方法教程”的完整攻略: PostgreSQL数据库服务端监听设置及客户端连接方法教程 PostgreSQL是一种常用的关系型数据库,其服务端监听设置和客户端连接方法非常重要,在此提供一份详细的教程。 服务端监听设置 修改postgresql.conf文件 在PostgreSQL安装目录下找到po…

    other 2023年6月27日
    00
  • java编程创建型设计模式单例模式的七种示例

    首先,我们需要了解什么是设计模式。设计模式是软件开发过程中对常见问题的反复实践和总结,是一套经过验证的、反复使用的具有普遍适用性的解决方案。在Java编程中,单例模式是最为常见的设计模式之一。 单例模式的定义 单例模式是一种创建型设计模式,它能够保证一个类在任何情况下都只有一个实例,并提供了一个访问该实例的全局访问点。 单例模式的优点和适用场景 单例模式具有…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部