模数指除法运算后的余数。

例如,11 mod 3 = 2,因为 11 ÷ 3 = 3,余数为 2。

示例 #1(简单):56221 mod 10

形式为x mod 10的问题再简单不过了。

写:

56221 = (5622 × 10) + 1

任何整数乘以10后都能被10整除,因此:

  • 56220 除以 10 的余数为 0

  • 1 模 10 = 1

因此:

56221 模 10 = 1

示例 #2(进阶):7216371773 mod 19646275

这里我们有一个10位数的数字,取模于一个8位数的数字。

当模数较大(尤其是当其大于√x时),一种实用的方法是:

  1. 求整数商 q = ⌊x / y⌋(即使近似值,但此处将其视为精确值)。

  2. 计算x − qy以得到余数。

在此情况下,使用标准除法(或交叉除法),我们得到:

  • q = 367

因此剩余部分是:

7216371773 − 367 × 19646275

一种在脑中进行计算的实用方法是将19646275与367相乘,具体步骤如下:

  • 19646275 × 300

  • 19646275 × 60

  • 19646275 × 7

…并从7216371773中减去。

逐位“余数追踪”变体(从左至右)

另一种方法是将问题简化为:

7216371773 模 367

在求得商(此处的“367”)后,通过反复将数字带下来(类似除法运算)并逐次减去367的倍数,来计算余数。

一个示例缩减序列(示意性)如下所示:

  • 721 − 367 = 354 → 借位下一位 → 3546

  • 减去 9×367 = 3303 → 3546 − 3303 = 243 → 往下移下一位数 → 2433

  • 2433 − 6×367 = 231 → 取下一位数 → 2317

  • 2317 − 4×367 = 849 → 取下一位数 → 8491

  • 8491 − 6×367 = 6289 → 取下一位数 → 62897

  • 62897 − 2×367 = 62163 → 移下位数 → 621637

  • 621637 − 7×367 = 619068 → 借位下一位 → 6190683

  • 6190683 − 5×367 = 6188848

  • 然后用剩余部分除以367取余数作为结果

这种方法可以变得很快,但需要练习——特别是"降位/减去倍数/保留进位数"的节奏。

示例 #3(专家级):1731879273540 mod 59501

现在我们有一个13位数的5位数模运算。虽然可以逐位进行除法运算,但效率低下。以下是两种高级处理方法。

方案1:因式分解 + 中国剩余定理(CRT)

若模数可被整除,则可使用中国剩余定理。

这里:

59501 = 13 × 23 × 199

计算x除以每个质因数的余数:

  • x 模 13 = 0

  • x 模 23 = 13

  • x 模 199 = 62

因此我们需要满足以下条件的w

  • w ≡ 0 (mod 13)

  • w ≡ 13 (mod 23)

  • w ≡ 62 (mod 199)

由 w ≡ 0 (mod 13),写出:

  • w = 13v

然后:

  • 13v ≡ 13 (mod 23)
    两边同时除以13(等价于乘以模23的13的逆元)。得:

  • v ≡ 1 (mod 23)

所以:

  • v = 23u + 1

  • w = 13(23u + 1) = 299u + 13

现在施加最终条件:

  • 299u + 13 ≡ 62 (mod 199)
    减去13:

  • 299u ≡ 49 (mod 199)

由于 299 ≡ 100 (mod 199),因此可化为:

  • 100u ≡ 49 (mod 199)

现在我们需要求100模199的逆元。一个快速观察:

  • 100 × 2 = 200 ≡ 1 (mod 199)

因此100模199的逆元2,故:

  • u ≡ 49 × 2 = 98 (mod 199)

在方程 w = 299u + 13 中代入 u = 98:

  • w = 299 × 98 + 13

  • w = 29302 + 13

  • w = 29315

因此:

1731879273540 模 59501 = 29315

(高效使用CRT需要熟悉模反演。运算本身并不复杂,关键在于掌握其结构,这需要反复练习。)

选项2:分块(块缩减)

不要将该数字视为13位数,而是将其拆分为若干块,并反复进行模59501运算。

将x表示为:

1 731 879 273 540

从左侧开始,取足够位数使结果超过59501,取模59501,然后将下一组数字"移入"。

例如:

  1. 减少:

  • 1731879 mod 59501
    若能快速看出商约等于29,则:

  • 1731879 − 29×59501 = 6350

那么现在继续:

  • 余数 = 6350

  1. 降下下一块(此处“273”作为三位数块),意为:

  • 6350 → 6350273
    然后计算:

  • 6350273 模 59501 = 43167

  1. 击倒最后一块“540”积木:

  • 43167 → 43167540
    然后:

  • 43167540 模 59501 =29315

这种方法只有在你能快速近似商值并完成中等规模乘法运算而不至于混乱时才算“快速”。其优点是步骤更少,缺点是每步所需的努力更大。

接下来
接下来

方程组