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日

相关文章

  • linux bash字符串处理大全

    Linux bash字符串处理大全 在Linux中,字符串的处理常常是需要的操作,特别是当我们需要将多个字符串拼接成新的字符串或者对字符串进行剪切、转换等操作时。在bash shell中,可以使用一系列的字符串处理函数,来对字符串进行各种操作。 本文将介绍bash中一些常用的字符串处理函数,以及如何使用这些函数。 字符串长度 获取字符串长度 获取字符串长度可…

    other 2023年6月20日
    00
  • 下载:Android 7.0开发者预览官方工厂镜像 附刷机方法

    下载 Android 7.0 开发者预览官方工厂镜像及刷机方法 Android 7.0 开发者预览版是 Android 系统的下一个大版本更新,此版本提供了更多的新特性和优化,让开发者和用户体验更加完美。本篇文章将介绍如何下载 Android 7.0 开发者预览版的官方工厂镜像,并提供了刷机方法。 一、下载 Android 7.0 开发者预览版官方工厂镜像 …

    other 2023年6月26日
    00
  • Mac实用操作技巧(二)

    Mac实用操作技巧(二) 本文将为您提供Mac实用操作技巧(二)的完整攻略,包括Mac快捷键、Finder的使用技巧、以及两个示例说明。 Mac快捷键 Mac快捷键是Mac OS X操作系统中的一种快捷键,可以帮助用户更快地完成一些常用的操作。以下是一些常用的Mac快捷键: Command + C:复制选中的内容。 Command + V:粘贴复制的内容。 …

    other 2023年5月6日
    00
  • mysql数据库表增添字段,删除字段,修改字段的排列等操作

    Mysql数据库表增添字段的操作 在已经创建的表中增加新的字段,使用 ALTER TABLE 语句,对于需要增加的字段,需要指定字段名称、数据类型、长度等信息。 mysql ALTER TABLE table_name ADD new_column_name column_definition; 示例: 在 users 表中添加 phone 字段,数据类型为…

    other 2023年6月25日
    00
  • [工具推荐]001.flippdf使用教程

    工具推荐:001.flippdf 001.flippdf是一款免费的在线PDF转换工具,可以将PDF文件转换为可翻页的HTML5格式,方便用户在网页上浏览和分享。本文将提供001.flippdf使用教程的完整攻略,包括以下步骤: 访问001.flippdf网站 上传PDF文件 转换PDF文件为HTML5格式 预览和分享HTML5格式文件 同时,本文将提供两个…

    other 2023年5月9日
    00
  • tree默认选中

    在Web应用程序中,我们经常需要使用树形结构来展示数据。在某些情况下,我们需要在树形结构中默认选中某些节点。以下是一个完整攻略,介绍了如何在树形结构中默认选中节点。 步骤1:树结构 首先,我们创建一个树形结构,该结构包含多个节点。以下是一个示例: <ul id="tree"> <li> <span>No…

    other 2023年5月6日
    00
  • 详解MySQL的数据行和行溢出机制

    详解MySQL的数据行和行溢出机制 MySQL是一个著名的关系型数据库系统,其中数据的存储和处理一直是其重要的特性。数据行和行溢出机制是MySQL中数据存储和管理的重要方面,下面将详细讲解这个主题。 数据行 MySQL中的数据行是数据存储的基本单位,每个数据行中包含了一条记录的所有字段。MySQL使用B-Tree索引算法来组织和管理数据行,数据行中的每个字段…

    other 2023年6月27日
    00
  • OPPO手机存储空间不足怎么办?OPPO手机清理内存方法

    OPPO手机存储空间不足怎么办? 如果你的OPPO手机存储空间不足,可以采取以下方法来清理内存和释放空间。 1. 清理应用缓存和数据 应用缓存和数据占据了大量的存储空间,清理它们可以释放一些空间。你可以按照以下步骤进行操作: 打开手机的设置菜单。 滑动到\”应用管理\”或\”应用和通知\”选项。 选择要清理的应用。 点击\”存储\”或\”存储空间\”选项。 …

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