我有 3 个大的 64 位数字:A、B 和 C。我想计算:
(A x B) mod C
考虑到我的寄存器是 64 位,即写入a * b
实际上产生 (A x B) mod 2⁶⁴。
最好的方法是什么?我正在用 C 编码,但在这种情况下,我认为该语言不相关。
在对指向此解决方案的评论表示赞成后:
(a * b) % c == ((a % c) * (b % c)) % c
让我具体一点:这不是一个解决方案,因为 ((a % c) * (b % c)) 可能仍然大于 2⁶⁴,并且寄存器仍然会溢出并给我错误的答案。我会:
(((A mod C) x (B mod C)) mod 2⁶⁴) mod C