关于mod

灌水区

ningago @ 2022-05-01 19:09:31

数学上:

(a\times c)\ \bmod b=(a \ \bmod b)\times(c\ \bmod b)

在c++的%下成立吗?(负数取模)


by ღꦿ࿐ @ 2022-05-01 19:11:56


by yllcm @ 2022-05-01 19:12:45

显然不吧


by ningago @ 2022-05-01 19:13:35

@ღꦿ࿐

有没有类似 (a%b+b)%b的方式修改使得成立呢?


by LeTu_Jun @ 2022-05-01 19:14:06

以为是MC粉


by donghanwen1225 @ 2022-05-01 19:15:25

C++ 下负数取模后仍然是负数,而数学中负数取模得到的是正数。

在 C++ 中,只要让所有数取模后都变成正数,则这个式子仍然成立。


by VinstaG173 @ 2022-05-01 19:24:27

@ningago 数学上也不成立吧(?


by ningago @ 2022-05-01 19:32:37

@VinstaG173

之前听课说成立,我也不清楚


by VinstaG173 @ 2022-05-01 19:39:22

@ningago 在数学定义下 a \bmod{b} 为最小的使得 b \mid (a-k) 的非负整数 k。取 a=7,b=5,c=8 则显然 (a \times c)\bmod{b}=56 \bmod{5}=1(a \bmod{b}) \times (c \bmod{b})=(7\bmod{5})\times(8\bmod{5})=6


by ningago @ 2022-05-01 19:41:39

@VinstaG173

我写错了,这个公式右边是 ((a\%c)\times (b\%c))\%c


by VinstaG173 @ 2022-05-01 19:43:37

@ningago 那在 C++ 里是成立的,C++ 里的 % 与数学不同之处在于负数会取模成相应的绝对值最小的非正数,显然你给的式子两侧符号是相等的。


| 下一页