获得两个大数并通过在 C 中迭代取 mod 值来减少它们的差异

obtaining two large numbers and reducing their difference by taking their mod values iteratively in C

好吧,假设我应该得到 D = (A - B) mod M,其中 A 和 B 非常大,大到 long long 无济于事。 A 和 B 是迭代独立获得的,我将在每次迭代中获得 A mod M,在每次迭代中获得 B mod M。现在,假设 B 总是小于 A,但是 (Bmod M) 可以大于 (A mod M),那么当计算 D 时,将得到一个负数,这不对,因为 B 比 A 小。我该怎么做呢?提前致谢。

如果 ((A mod M) - (B mod M)) mod M 给你一个否定的结果(因为它可能,因为旧的 C 在任一参数为负时留下 modulus 实现定义的结果,并且 C99 定义它以便如果股息为负,则结果为负),只需添加 M 即可获得您想要的结果。毕竟x和x+M是等价的,modM.