📜  模块化添加

📅  最后修改于: 2021-09-28 10:50:05             🧑  作者: Mango

以下是模块化加法的一些有趣属性:

示例 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