通过平方求幂

2023-12-12

当我在寻找的时候通过平方求幂我在那里得到了递归方法,但后来我偶然发现了这个伪代码,我无法完全理解它。

function powermod(base, exponent, modulus) {
    if (base < 1 || exponent < 0 || modulus < 1)
        return -1

    result = 1;
    while (exponent > 0) {
       if ((exponent % 2) == 1) {
           result = (result * base) % modulus;
       }
       base = (base * base) % modulus;
       exponent = floor(exponent / 2);
    }
    return result;
} 

如果您能用简单的术语提供一些见解,那将会有很大的帮助


该代码依赖于以下事实:

x^y == (x*x)^(y/2)

该循环正是这样做的:将指数除以二,同时对底数进行平方。

一个例子:

让我们考虑计算 3^13 的结果。您可以将指数 (13) 写为二进制幂的和:3^(8+4+1). Then: 3^13 = 3^8 * 3^4 * 3^1.

这种二元幂的分解是由%2, /2使用上面解释的基本原理在代码中完成。

一步步:

你开始于3^13. As 13%2==1,将结果乘以3,因为答案does有一个因素3^1.

然后将指数除以 2 并计算底数的平方 (9^6 == 3^12). As 6%2==0,这意味着答案doesn't有一个因素3^2.

然后将指数除以 2 并计算底数的平方 (81^3 == 3^12). As 3%2==1,将结果乘以 81 因为答案does有一个因素3^4.

然后将指数除以 2 并计算底数的平方 (6561^1 == 3^8). As 1%2==1,将结果乘以 6561 因为答案does有一个因素3^8.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过平方求幂 的相关文章

随机推荐

  • Android:如何获取文件的创建日期?

    这是我的代码 File TempFiles new File Tempfilepath if TempFiles exists String child TempFiles list for int i 0 i lt child lengt
  • git分支可以用数字列出吗?

    我想知道是否有人构建了一个脚本或有办法列出带有数字的 git 分支 以便代替这个 最好在 bash 中 feature myusername ID 1111 my branch name feature myusername ID 2222
  • django:控制json序列化

    有没有办法在django中控制json序列化 下面的简单代码将返回 json 中的序列化对象 co Collection objects all c serializers serialize json co json 将类似于以下内容 p
  • Git 中的子模块、子树或其他依赖项?

    我有一个较大的项目 其中有很多模块 库及其各自的存储库 这些模块中的大多数是其他模块的依赖项 而不是项目的依赖项 现在已经到了主项目有多个子项目并且许多模块被共享的地步 有些依赖关系的深度超过 3 4 层 我读过可以在项目内部更新 拉取子模
  • 调用 async fns 时创建值流?

    我不知道如何提供Stream我在哪里await异步函数来获取流值所需的数据 我尝试过实施Stream直接使用特质 但我遇到了问题 因为我想使用异步的东西 比如awaiting 编译器不希望我调用异步函数 我认为我缺少一些关于目标的背景知识S
  • 使用 Apache (.htaccess) 将 WWW 转换为非 WWW URL(删除 WWW)

    我必须将我的网站从https www example com to https website com SSL已正确安装在我的服务器上 我在用Apache并且必须使用来做到这一点Apache 任何一个httpd conf ssl conf
  • 如何使用Python的pip下载并保存包的压缩文件?

    如果我想使用pip命令下载包 及其依赖项 但是keep下载的所有压缩文件 例如 django socialregistration tar gz 有办法做到这一点吗 我尝试过各种命令行选项 但它似乎总是解压并deletezipfile 或者
  • cocoapods - “pod 安装”需要很长时间

    我试图用以下命令更新现有的 Podpod install命令 但需要永远运行 详细模式显示它卡在下一行 永远 更新规范存储库master usr bin git pull no rebase no commit 卡住后没有网络活动 我遇到了
  • AppWidgetProvider问题

    我有一个 AppWidgetProvider 当小部件首次添加到主屏幕时 我需要进行一些初始化 据我所知 执行此操作的位置是在 onEnabled Context context 方法中 我的问题是这个方法永远不会被调用 据我在 logca
  • C++ 库包含

    我对 C 比较陌生 第一次需要使用库 我希望有人能够向我展示如何正确地 链接到 包含 该库 我想使用的库是 ID3 v3 8 8 可以在这里找到 http id3lib sourceforge net 我已经下载了 Windows 二进制文
  • Java SystemV 时区和 JodaTime

    我正在使用 Joda Time 在 Java 应用程序中处理时区 我在尝试从 java 时区的 id 构建 DateTimeZone Joda Time 对象时遇到问题 乔达扔出一个 java lang IllegalArgumentExc
  • 将 UTC 日期时间全局转换为用户指定的本地日期时间

    我将所有 DateTime 字段存储为 UTC 时间 当用户请求网页时 我想采用他的首选本地时区 而不是服务器计算机的本地时区 并自动将所有 Web 表单中的所有日期时间字段显示为本地日期 当然 我可以在每种表单中的每个 DateTime
  • 具有特定产品标签的 WooCommerce 产品的批量动态定价

    我正在尝试为所有具有标签的产品添加动态折扣 批量折扣 我希望如果客户购买例如 就会发生折扣 5 个带有标签的相似或不同产品 我正在与this代码 和this回答 这就是我所拥有的 add action woocommerce before
  • Android Gingerbread 之后 Async Task 到底发生了什么变化?

    Android 2 3 之后 Android 团队在异步任务中真正做了哪些改变 当我执行以下代码时 我在 Android 2 3 和 3 0 中得到相同的结果 package com sample asynctask import andr
  • 如何检查 Sitecore 项目是否使用别名

    目前 Sitecore 中的 别名 会生成指向同一内容项的多个路由 这在某些情况下可能会对 SEO 产生负面影响 我正在寻找一种方法来以编程方式检查当前页面 项目 URL 请求是否使用别名 我希望会有类似的东西 Sitecore Web W
  • 选择至少在所需列之一中具有非 NA 值的行

    我有这段代码可以正常工作 CompleteCoxObs lt temp is na temp 8 FALSE is na temp 9 FALSE is na temp 10 FALSE 什么是更好 更有效的方法来达到相同的结果 您可以尝试
  • UITableView 标题中 UISearchBar 的布局在旋转后混乱

    我有一个UITableView搜索栏以编程方式插入到表格中headerView override func viewDidLoad super viewDidLoad resultSearchController UISearchContr
  • 如何在隐身模式下启用 Chrome 扩展程序?

    我为 Google Chrome 创建了一个扩展程序 想知道我的扩展程序是否可以在隐身模式下启用 Ex chrome extension allowedIncognitoAccess true 无法自动激活 Chrome 扩展程序的隐身模式
  • 如何使用多列和参数“split”创建一个箱线图

    我需要从 data frame 创建一个箱线图三个数字列 并使用参数split将盒子分开paint 我有一个很大的 data frame 但我需要的是下面的示例 paint lt c blue black red blue black re
  • 通过平方求幂

    当我在寻找的时候通过平方求幂我在那里得到了递归方法 但后来我偶然发现了这个伪代码 我无法完全理解它 function powermod base exponent modulus if base lt 1 exponent lt 0 mod