C++ 程序实现模幂运算算法2025 年 1 月 12 日 | 5 分钟阅读 模幂运算是数论和密码学中一个基本算法,它能有效地找到一个整数的幂次方再除以另一个整数的余数。该算法在处理大数时非常高效,例如在密码学应用中,RSA 加密就是一个例子。 该算法利用了 (a.b) mod n 等价于 (a mod n ⋅ b mod n) mod n 的事实,因此,在幂运算过程中,我们可以在每一步执行模规约以避免巨大的中间结果。 数学概念模算术模算术是数论的一个分支,致力于对受模数限制的整数进行算术运算。在模幂运算中,它关注的是模运算,记作 a mod n,表示 a 除以 n 的余数。 模算术的关键性质加法: (a+b) mod n = ((a mod n) + (b mod n)) mod n。 乘法: (a.b) mod n = (((a mod n) ⋅ (b.mod n)) mod n) mod n。 幂运算 模幂运算问题涉及在给定整数 a、b 和 n 的情况下,高效地推导出 a^b mod n。 方法一:模幂运算的基本迭代方法模幂运算的基本迭代算法是基本迭代方法。它有一个循环,在每一步迭代地对底数进行平方并对结果进行模 n 规约。这种方法的优点在于其简单性和可理解性,但最重要的是,这种方法是教育领域相关概念的理想选择,并且是理解更高级算法的基础。 程序输出 Enter the base: 4 Enter the exponent: 3 Enter the modulus: 2 Result: 4^3 mod 2 = 0 说明 算法从将最终结果设置为 1 开始,因为任何数次的 0 幂都是 1。之后,它立即进入一个循环,遍历指数的位。此循环一直持续到指数变为 0。 在循环内
它检查以下情况:如果 (exponent % 2 == 1),以确保指数的当前最低位已设置 (1)。如果该位已设置,则表示相应的 2 的幂是最终结果之一,并且底数乘以当前最终结果。
为了处理指数中的下一位,对底数进行平方。这是一个关键优化,因为它使算法能够成功地计算 2 的幂。
在循环的下一轮中,指数右移,此操作等效于除以 2。 此过程持续到指数等于零。最终,函数返回计算出的值。 主函数中会提示用户输入底数、响应和模数。然后,这些值用于使用幂函数执行模表达式,并显示结果。 示例用法 主函数中示例的使用演示了模幂算法的简单用法和实用性。然而,应该注意的是,这种简单的迭代方法一点也不复杂,但在大数应用中,通常会使用更优化的二元指数方法来提高效率。 复杂性分析 最后,作为使用模幂运算的简单迭代方法编码的 C++ 代码,其时间和空间复杂度是一个宝贵的评估其计算效率和可伸缩性的标准。 时间复杂度 指数二进制表示中的位数可以确定为基于循环迭代次数的模幂运算算法时间复杂度的决定因素。设指数中的位数为 k。 循环迭代 power 函数中的 while 循环对指数的每一位迭代一次。指数在每次迭代中都会右移(除以 D),直到它达到零,因此循环执行 O(k) 次。 循环内的操作 循环执行简单的算术运算,例如,在每次迭代中进行模乘和除以 2。这些操作在每次迭代中都不会停止。 这意味着模幂运算的基本迭代方案的总时间复杂度为 O(k),其中 k 表示指数的位。这种复杂度被证明是高效的,它不仅使算法能够处理显著大小的指数,而且还使用完成任务所需的合理资源量。 空间复杂度 空间复杂度是对算法运行所需的内存的评估,包括辅助空间和输入空间。 辅助空间 该算法需要常数辅助空间,独立于输入的大小。结果、底数、指数和模数是唯一占用空间变量,每个变量都需要恒定量的存储空间。 输入空间 输入空间由输入值的大小决定:底数、指数和模数。因为这些值由用户输入,不取决于输入的大小。 因此,模幂运算的基本迭代方法的总空间复杂度为 O(1),表明该算法使用恒定量的内存。 下一个主题C++ 程序使用运算符重载连接两个字符串 |
简介:毫无疑问,查找表是编程中一个基本概念,主要用于存储某些值,这些值已预先计算好,以便在运行时快速访问。在 C++ 中,查找表可以理解为接受输入...
11 分钟阅读
许多编程语言都提供了一种称为 async/await 的语法属性,该属性允许以类似于典型同步方法的方式组织异步或非阻塞过程。使用 async 和 await 是编写异步代码的一种简单方法。例如,执行一些计算然后...
阅读 3 分钟
C++ 有一套命名变量、函数和其他标识符的代码规则。这些规则称为命名约定,有助于使您的代码更具可读性和可维护性。变量名的指南应具有描述性和意义。例如,保存...的变量。
阅读9分钟
是 C 或 Cpp 编译器(如 GCC)和许多运行时环境在发生缓冲区溢出时或当有人尝试将过多数据存储到固定内存量时生成的错误消息。同时,它表现为…
阅读 4 分钟
宾果是一种机会游戏,参与者将随机选择的数字与预印在 55 个网格或卡片上的数字进行匹配。每个网格包含 25 个方格,每个方格包含一个 1 到 75 之间的唯一数字。五个垂直的方格列标记为“B”,……
5 分钟阅读
在 C++ 中,可以使用算术运算符来对两个数字进行加法运算。用于加法的算术运算符是加号(+)。要将两个数字相加,您首先声明用于存储数字的变量,然后使用加号将它们相加。C++ 代码:#include...
阅读 3 分钟
? 在编程领域,经常会出现解决复杂问题的创新解决方案。Duff's Device 是这种发明的绝佳例子,特别是在 C 和 C++ 编程语言中高效循环的领域。这个技术以其作者 Tom Duff 的名字命名,展示了一种...
阅读 4 分钟
Prim 算法是一种贪心算法,用于查找连通无向图的最小生成树(MST)。图的最小生成树是边的子集,它形成一棵树并连接图中的所有顶点,同时最小化...
阅读 26 分钟
引言:在软件开发中,设计模式为常见编程问题提供了可重用的解决方案。工厂设计模式是面向对象编程中最常用的设计模式之一。工厂设计模式提供了创建对象的接口,尽管子类……
阅读 4 分钟
在 c++ 中,哈希集合是包含唯一元素的无序集合。标准的集合操作,如删除、包含在 c++ 中。标准的基于集合的操作,如交集、对称差集和并集,由 c++ 构成。为了识别和搜索项目,哈希……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India