当前位置: 首页 > news >正文

模重复平方计算法

1. 问题背景:

  • 计算 bⁿ mod m,其中 n 是非负整数,b 和 m 是给定的。

  • n 被表示为二进制形式:n = n₀ + n₁·2 + ⋯ + nₖ₋₁·2ᵏ⁻¹,其中 nᵢ ∈ {0, 1}。

2. 算法核心:

  • 使用平方-乘法(Square-and-Multiply)算法,通过逐步计算幂的模值来优化。

  • 公式:bⁿ = bⁿ⁰ · (b²)ⁿ¹ · ⋯ · (b²ᵏ⁻²)ⁿᵏ⁻² · (b²ᵏ⁻¹)ⁿᵏ⁻¹ mod m

  • 逐步计算 b 的幂并取模,避免直接计算大指数。

3. 计算步骤:

  • 初始化:a₀ = bⁿ⁰ mod m,b₁ = b² mod m

  • 迭代:对于 i = 1 到 k - 1,计算 aᵢ = aᵢ₋₁ · bᵢⁿⁱ mod m,并更新 bᵢ₊₁ = bᵢ² mod m

  • 最终结果:aₖ₋₁ 就是 bⁿ mod m

4. 时间复杂度:

  • 算法时间复杂度为 O(log₂ n),因为它基于 n 的二进制表示的位数。

5. 具体算法如下:

  • 设 a = 1,并将 n 的二进制位从低到高处理。

  • 如果某位为 1,则乘以当前 b 的幂并取模。

  • 每次循环,b 平方并取模。

  • 最后,a 就是结果。

6.举例

        设 b = 3, n = 11, m = 7

        目标:计算 3¹¹ mod 7

步骤1: 将 n 转换为二进制

        11 的二进制表示是 1011, 即:

        n₀ = 1,n₁ = 1,n₂ = 0,n₃ = 1

        所以 11 = 1·2⁰ + 1·2¹ + 0·2² + 1·2³

步骤2: 初始化

        设 a = 1 (初始结果)

        设 b_current = 3 (初始底数)

步骤3: 按位处理

从 n 的最低位到最高位,逐位计算:

  1. 位 0 (n₀ = 1):
    • a = a · b_currentⁿ⁰ mod m = 1 · 3¹ mod 7 = 3
    • b_current = b_current² mod m = 3² mod 7 = 9 mod 7 = 2

  2. 位 1 (n₁ = 1):
    • a = a · b_currentⁿ¹ mod m = 3 · 2¹ mod 7 = 3 · 2 mod 7 = 6 mod 7 = 6
    • b_current = b_current² mod m = 2² mod 7 = 4 mod 7 = 4

  3. 位 2 (n₂ = 0):
    • a = a · b_currentⁿ² mod m = 6 · 4⁰ mod 7 = 6 · 1 mod 7 = 6 (因为 n₂ = 0 不需要乘)
    • b_current = b_current² mod m = 4² mod 7 = 16 mod 7 = 2

  4. 位 3 (n₃ = 1):
    • a = a · b_currentⁿ³ mod m = 6 · 2¹ mod 7 = 6 · 2 mod 7 = 12 mod 7 = 5

步骤4: 结果

        最终 a = 5,所以 3¹¹ mod 7 = 5

http://www.dtcms.com/a/511386.html

相关文章:

  • 温州网站制作套餐.net网站开发是什么对象开发
  • Tuning——CC调试(适用高通)
  • 【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体?
  • Leetcode+Java+图论+并查集
  • 网站代备案流程图越秀网站建设推广
  • 网站 app 公众号先做哪个网站建设实践
  • SpringBoot常用内置工具类使用示例
  • Qt和ffmpeg结合打造gb28181推流/支持udp和tcp被动以及tcp主动三种方式
  • 设计模式-工厂模式:解耦对象创建的设计艺术
  • UVa 1660 Cable TV Network
  • 使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 20--PO(POM) 设计模式和用例撰写
  • 网站建设年度计划申请了域名 网站怎么建设呢
  • 《黄雀》电视剧总结
  • 云计算与服务器概述
  • 【Java Web学习 | 第1篇】前端 - HTML
  • Jenkins流水线项目发布
  • 网站优化需要做什么烟台网站建设比较大的
  • CAN入侵检测系统IDS不行,用扩充白名单机制保证汽车功能安全需求
  • 微软Teams的Media bypass的介绍
  • 分布式一致性
  • 使用微软Agent Framework .NET构建智能代理应用
  • MOSHELL (10) : COLI 交互
  • 九江网站开发wordpress适合seo
  • 【JavaScript】some方法的详解与实战
  • 买机票便宜网站建设分站式二手车网站源码
  • windows配置hadoop环境
  • Java中的单例模式
  • K8s部署,新版本
  • LXC容器操作实战【Linux】
  • CAN总线: 仲裁