微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c 代码:防止模块操作中的超大模块溢出靠近溢出阈值的模块

如何解决c 代码:防止模块操作中的超大模块溢出靠近溢出阈值的模块

在我的 c 代码中,我必须执行一系列递归模块化操作。特别是我必须执行像 (A*B)modC 这样的操作,C~2^126 和 A,B,原则上,可能是非常大的数字(从 0 到 2^128 - 1)(我与128 位 unsigned __int128 变量)。
问题是如何在乘法过程中执行模块。我需要这个,因为如果在乘法之后执行模块,我可能会在乘法期间超过 2^128(如果 A 和 B 非常大)并破坏连续的模运算。
所以我想执行一个乘法,每次我通过 C(在乘法过程中)而不是每次我通过 2^128 - 1 时都从 0 重新开始。
我该怎么做?

解决方法

最简单的解决方案是将乘法实现为位循环,每次移位一并添加。通过这种方式,您可以计算每次通过循环的中间结果的模数。

它需要 128 次移位、128 次加法和 128 次模运算。如果这对你来说太慢了,那么一些专家可能会告诉你一个优化(但每个人都知道你应该只在你确定最简单的解决方案不够快时才考虑优化)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。