是否有一种不需要 BigInteger 类型的算法来计算 x 模 y 的乘法阶(对于 y < 1000)?
我目前使用的算法很快就会遇到非常高的数字。 我要执行的算法中的一个步骤是将 x 提升为应用于 y 的 totient 函数的结果。 结果是您可能会遇到非常大的数字。
例如。 当计算 10 modulo 53 的乘法阶时:
10^totient(53) == 10^52 == 1 * 10^52
以下算法在以下方面表现更好避免大数字,但当 10^mOrder 大于数据类型的容量时,它仍然失败:
mOrder = 1
while 10^mOrder % 53 != 1
if mOrder >= i
mOrder = 0;
break
else
mOrder = mOrder + 1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用模幂,可以计算 (10 ^ mOrder % 53) 或一般情况下的任何 (a ^ b mod c),而无需获得比 c 大得多的值。 有关详细信息,请参阅Wikipedia,还有以下示例代码:
Using Modular exponentiation, it is possible to calculate (10 ^ mOrder % 53) or in general, any (a ^ b mod c) without getting values much bigger than c. See Wikipedia for details, there's this sample code, too:
为什么要求幂? 你不能在循环中只乘以模 n 吗?
或者,在 ptheudo(原文如此)代码中:
Why exponentiate? Can't you just multiply modulo n in a loop?
Or, in ptheudo (sic) code: