A、B、Cの3つの大きな64ビット数があります。計算したいもの:
(A x B) mod C
私のレジスタが64ビットであることを考えると、つまり、書き込みa * b
は実際には(A x B)mod2⁶⁴を生成します。
それを行うための最良の方法は何ですか?私はCでコーディングしていますが、この場合、言語は適切ではないと思います。
この解決策を指すコメントに賛成票を集めた後:
(a * b) % c == ((a % c) * (b % c)) % c
具体的に説明します。((a%c)*(b%c))はまだ2⁶⁴よりも大きい可能性があり、レジスタがオーバーフローして間違った答えが返されるため、これは解決策ではありません。してただろう:
(((A mod C)x(B mod C))mod2⁶⁴)mod C