对于大于 8、16、32 的除数,计算 MODULUS 的速度有多快

How fast calculate MODULUS for divisor greater than 8, 16, 32

我正在尝试进行非常快速的 MOD 操作。 我在几页中看到我们可以使用 AND 运算符和 (Divisor-1) 来计算 MOD。例如:

result = (100 mod 8) 与 结果 = (100 和 7)

如果除数小于 8 位,它可以正常运行,但是如果我们计算 (1245 mod 67),我们可以看到 (1245 和 66) 的结果不同。

那么,我怎样才能比使用 VB.NET 语言提供的 MOD 运算符计算得更快?

谢谢!

按位使用 AND 仅适用于 2 的模数幂(并且仅适用于正数)。它不适用于其他号码。参见 this link

我认为框架内置的模运算符速度很快,您可能无法对其进行改进。

嗯,100 mod 8 = 100 and 7 有效,因为 7 是二进制 111b

无论你有什么数字(100 十进制是 1100100b),由于 111b,最后 3 个二进制数字(位)被保留。对于 100,那将是 100b = 4.

现在考虑一下您对 1245 mod 67 所做的尝试。

1245 是二进制 10011011101b.

67 是二进制 1000011b.

你能看出为什么它不起作用吗?