以下是模块化加法的一些有趣属性:
(a + b) mod m = ((a mod m) + (b mod m)) mod m
(a + b + c) mod m = ((a mod m) + (b mod m) + (c mod m)) mod m
示例 1:
求 22 + 26 + 29 除以 5 的余数。
解决方案:
将 22 除以 5,我们得到 2 作为余数。
将 26 除以 5,我们得到 1 作为余数。
将 29 除以 5,我们得到 4 作为余数。
表达式 (22 + 26 + 29)/5 的余数将等于 (2 + 1 + 4)/5。
组合余数将等于 7/5 的余数,即 2。
示例 2:
求 1234 + 5678 + 1478 除以 11 的余数。
解决方案:
将 1234 除以 11,我们得到 2 作为余数。
将 5678 除以 11,我们得到 2 作为余数。
将 1478 除以 11,我们得到 4 作为余数。
雷姆 [(1234 + 5678 + 1478)/11] = 雷姆 [(2 + 2 + 4)/11]
雷姆 [8/11] = 8。
它如何有用?
如果我们需要求两个大数相加的余数,我们可以避免做大数相加,这对于大数相加会导致溢出的编程尤其有用。就像在 C、C++ 编程语言中,如果两个大数相加超过 10^18,就会发生溢出,我们开始得到意想不到的结果。
证明:这里我们将证明两个数字,因此它可以推广到两个以上的数字。
Let a % m = r1
and b % m = r2
Then a and b can be written as (using quotient theorem).
Here q1 is quotient when we divide a by m and r1 is remainder.
Similar meanings are there for q2 and r2
a = m x q1 + r1
b = m x q2 + r2
LHS = (a + b) % m
= ((m x q1 + r1 ) + (m x q2 + r2) ) % m
= (m x (q1 + q2) + r1 + r2 ) % m
We can eliminate the multiples of m when we take the mod m.
Then,
LHS = (r1 + r2) % m
RHS = (a % m + b % m) % m
= (r1 + r2) % m
Hence, LHS = RHS