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日

相关文章

  • JS创建自定义表格具体实现

    JS创建自定义表格是一项常用的前端开发技能,下面是实现该技能的攻略: 步骤一:创建一个页面元素来展示表格 我们可以使用HTML中的table标签来创建一个页面元素来展示表格,代码如下: <table id="myTable"> <thead> <tr> <th>表头1</th> …

    other 2023年6月25日
    00
  • Windows 8技巧:windows 8文件 文件夹管理[文件以及文件夹操作]

    我们来分享一下关于Windows 8文件和文件夹的管理技巧。 1. 文件和文件夹的创建和重命名 要创建一个新文件或一个新文件夹,可以右键单击桌面,在弹出的菜单中选择“新建”并选择文件或文件夹。命名文件和文件夹可以通过双击名称编辑或通过右键单击并选择重命名进行修改。另外,还可以使用快捷键F2来进行文件或文件夹的重命名。 2. 文件和文件夹的复制和移动 复制文件…

    other 2023年6月26日
    00
  • dubbo admin详解

    Dubbo Admin详解 Dubbo是一个高性能、轻量级、开源的Java RPC框架。而Dubbo Admin则是Dubbo提供的一个用于管理及监控Dubbo应用的Web界面。本文将详细介绍如何使用Dubbo Admin。 安装及部署Dubbo Admin 下载Dubbo Admin 可以在Dubbo的GitHub仓库中找到Dubbo Admin的下载链接…

    其他 2023年3月28日
    00
  • win10右键管理打不开怎么办?win10右键管理打不开的解决方法

    win10右键管理打不开怎么办? 问题描述 在win10系统中,右键点击文件或者文件夹时,如果右键管理打不开,屏幕没有反应,这时就需要进行相应的解决方法了。 解决方法 1. 修改注册表 步骤如下: 打开“运行”命令框,输入“regedit”进入注册表编辑界面。注册表编辑器可以通过“开始”菜单中的“运行”或者搜索框进行搜索,也可以使用快捷键“Win + R”调…

    other 2023年6月27日
    00
  • PHP 之Section与Cookie使用总结

    PHP 之 Section 与 Cookie 使用总结 什么是 Session? Session 是指在客户端与服务器之间保存状态的一种机制。在 PHP 中,我们可以使用 session_start() 函数来开始一个新 session。一旦 session 开始,可以包含任何我们想要保存的数据。 如何使用 Session? 使用 session_start…

    other 2023年6月27日
    00
  • 5款替代微软visio的开源免费软件

    当然,我很乐意为您提供有关“5款替代微软Visio的开源免费软件”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是Visio? Visio是微软公司开发的一款流程图和矢量图绘制软件,可以用于绘制各种类型的图表、流程图、组织结构图、网络图等。 2. 5款替代微软Visio的开源免费软件 以下是5款替代微软Visio的开源免费软件: 2.1 Dia Dia…

    other 2023年5月6日
    00
  • SpringBoot获取yml和properties配置文件的内容

    Spring Boot 是一款基于 Spring 框架的快速 Web 开发工具,可以非常方便的实现 Web 服务的快速搭建,其中获取 yml 和 properties 配置文件的内容也是非常常见的操作。下面就是关于该操作的完整攻略: 获取 yml 文件中的配置项 获取 yml 文件中的配置项可以通过 @ConfigurationProperties 注解来实…

    other 2023年6月25日
    00
  • sqlserver面试题汇总

    SQL Server面试题汇总攻略 SQL Server是一款常用的关系型数据库管理系统,广泛应用于企业级应用和数据分析等领域。在SQL Server的面试中,常常会涉及到一些基础知识和高级应用技巧。本攻略将介绍SQL Server面试题汇总的完整攻略,包括基础知识、高级应用技巧和两个示例说明。 SQL Server基础知识 SQL Server基础知识包括…

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