C++的简单模幂,无溢出
Simple Modular Exponentiation in C++ without overflow?
我必须创建一个简单的模幂函数,该函数接受输入三个整数a,b和c,并执行任务:a^b %c而不会溢出。
它是
)。模幂。假设无符号a
,b
,c
并且a * (c - 1)
不会溢出:
unsigned int r = 1;
for (unsigned int k = 0; k < b; k++)
r = r * a % c;
(请注意,C 中没有幂运算符,^
用于XOR
(OR
为此使用欧拉定理,它可以显着降低指数。
您需要一个帮助程序函数来查找 phi 函数(或者其中可能有一个包含它的库)。 然后,您所要做的就是
(a ^ b) % c => (a ^ (b % phi(c)) % c
这肯定会有助于减少溢出的机会。 此外,mod 具有以下属性:
a*b % c = (a % c)*b % c
这意味着如果你的指数会导致溢出,你可以减半指数,并在较小的值上执行 mod。 查看一些数论书籍,了解更多技巧,使这更容易!
相关文章:
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 'short int'持有的值溢出,但"自动"不会溢出?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 大于65535的C++数组[size]引发不一致的溢出
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 一种在C++中读取TXT配置文件的简单方法
- C++中无符号字符溢出
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 堆缓冲区溢出随机发生。对于一个简单的代码?(我是C++新手)
- 如何为大型项目制作一个简单的工具来检测Linux中的双倍空闲或内存溢出
- 简单的程序集代码会产生缓冲区溢出