将无符号 mod 运算分成几部分

问题描述 投票:0回答:1

有没有办法将无符号整数的 mod 运算拆分为更简单的操作?

例如,

x % 28
。有没有办法把它分成4和7的运算?

mathematical-optimization
1个回答
0
投票

不,因为如果你想计算

x % (y * z)

通过

(x % y)% z

由于 y 具有模类

,您最终会丢失数据

0, 1, ..., y - 1

并且,假设有一个 k 值,一个自然数,如下所示

0<= k < y

如果 z > 1,则

k % y == (k + y) % y == k

一旦你的 x % y 产生 k,你就不知道 x 是 k 还是 k + y 或 k + 2y

因此,在我们的示例中,我们可以说

x%7==3

x 可以是 3、10、17 或其他。

所以,当你的值为 3 时,用 4 对它取模将得到 3,即使它最初是 10,与 4 的模将是 2。

还有,

0<= x % 4 < 4

0<= x % 7 < 7

0<= x % 28 < 28

假设您的值为 27

27%28==27

(27%4)%7==3%7==3

也许人们可以找到一些巧妙的方法来剖析模数,通过保留第一个的乘积并将其包含到计算中,但这会破坏数学优化的目的,因为它会减慢运算速度。

© www.soinside.com 2019 - 2024. All rights reserved.