数论与模运算:练习题及分步解答

免费的数论与模运算练习题,附图示、提示和完整详细解答。每次数值都不同,分三个难度:最大公约数与余数, 逆元与同余式, 模幂与 RSA。

免费练习题简单
012345678910mod 11

求 942 mod 11,即满足 0 ≤ r < 11 的余数 r。

a = 942n = 11

精确答案:整数,不要四舍五入。

下一题 →
免费练习数论与模运算立即练习数论与模运算每天 5 道免费题目,无需绑定银行卡。

练习内容

  1. 简单最大公约数与余数
  2. 中等逆元与同余式
  3. 困难模幂与 RSA

如何求解数论与模运算问题

  1. 先把每个数对 n 取模;余数在 0 到 n − 1 之间。
  2. 求最大公约数时,用欧几里得算法反复做除法;最后一个非零余数就是最大公约数。
  3. 求逆元时,运行扩展算法并保留 a 的系数;若为负数则加上 n。
  4. 解 a·x ≡ b 时,两边乘以 a⁻¹;合并两个同余式时,写成 x = r₁ + m₁k。
  5. 求幂时,把指数写成二进制并反复平方;在 RSA 中,d = e⁻¹ mod φ(n),其中 φ(n) = (p − 1)(q − 1)。

常见错误

  • 对负数给出了负的余数。
  • 在第一个余数处就停止欧几里得算法。
  • 让逆元保持为负数,而不是加上 n。
  • 把 RSA 指数 d 对 n 取模,而不是对 φ(n) 取模。
  • 用费马定理时,把指数对 p 取模,而不是对 p − 1 取模。

关键公式

带余除法
a = q·n + r, 0 ≤ r < n
欧几里得
gcd(a, b) = gcd(b, a mod b)
最小公倍数
lcm(a, b) = a·b/gcd(a, b)
逆矩阵
a·a⁻¹ ≡ 1 (mod n), gcd(a, n) = 1
线性同余方程
a·x ≡ b → x ≡ a⁻¹·b (mod n)
欧拉函数
φ(n) = n·∏(1 − 1/p), φ(pᵏ) = pᵏ − pᵏ⁻¹
费马
aᵖ⁻¹ ≡ 1 (mod p)
RSA
n = pq, φ = (p − 1)(q − 1), d = e⁻¹ mod φ, c = mᵉ mod n, m = cᵈ mod n

从零开始学习数论与模运算

1余数与同余

用 n 除 a 得到商 q 和余数 r:a = q·n + r,0 ≤ r < n。余数记作 a mod n。对于负数,商也为负:−3 = −1·7 + 4,所以 −3 mod 7 = 4。

当两个数除以 n 的余数相同,即 n 整除 a − b 时,它们对模 n 同余,记作 a ≡ b (mod n)。

0123456mod 7−3 ≡ 411 ≡ 4

每一步都可以对余数取模,使数字保持较小:

(a + b) mod n = ((a mod n) + (b mod n)) mod n,a·b 同理

例如 47·58 mod 9:47 ≡ 2,58 ≡ 4,所以 47·58 ≡ 8 (mod 9)。

自测 −17 mod 5 是多少?
  1. 2
  2. 3
  3. −2
  4. −3

答案: 3. −17 = −4·5 + 3,所以余数是 3。答案 2 是 17 mod 5;余数永远不是负数。

2欧几里得算法

最大公约数 gcd(a, b) 是同时整除两数的最大的数。欧几里得算法使用 gcd(a, b) = gcd(b, a mod b):

  1. 做除法:a = q·b + r。
  2. 用 (b, r) 替换 (a, b)。
  3. 重复直到余数为 0。最后一个非零余数就是最大公约数。
252 = 2·105 + 42, 105 = 2·42 + 21, 42 = 2·21 + 0 → gcd = 21

最小公倍数由此得出:lcm(a, b) = a·b / gcd(a, b)。

自测 gcd(84, 36) 是多少?
  1. 12
  2. 252
  3. 4
  4. 6

答案: 12. 84 = 2·36 + 12,36 = 3·12 + 0,所以最大公约数是 12。252 是最小公倍数,即 84·36/12。

3逆元与扩展算法

a 模 n 的逆元是满足 a·x ≡ 1 (mod n) 的数 x。它存在当且仅当 gcd(a, n) = 1。

扩展欧几里得算法对 (n, a) 运行欧几里得算法,并为每个余数保留一个系数 t,使每个余数 r ≡ t·a (mod n)。开始时 n 的 t = 0,a 的 t = 1;每个新的 t 等于上两行的 t 减去 q 乘以上一行的 t。出现余数 1 时,它的 t 就是逆元。

有了逆元,同余式 a·x ≡ b (mod n) 的解为 x ≡ a⁻¹·b。当 d = gcd(a, n) 大于 1 时,若 d 整除 b 则有 d 个解,否则无解。

模数互素的两个同余式 x ≡ r₁ (mod m₁) 和 x ≡ r₂ (mod m₂) 在模 m₁·m₂ 下恰有一个解(中国剩余定理)。写成 x = r₁ + m₁k 并求解 k。

例题讲解

求 7 模 40 的逆元。

1

对 (40, 7) 做欧几里得算法

40 = 5·7 + 5, 7 = 1·5 + 2, 5 = 2·2 + 1
2

记录系数 t

t(40) = 0,t(7) = 1。

t(5) = 0 − 5·1 = −5, t(2) = 1 − 1·(−5) = 6, t(1) = −5 − 2·6 = −17
3

化为正数

1 ≡ −17·7 (mod 40),而 −17 + 40 = 23。

4

校核

7·23 = 161 = 4·40 + 1
答案

逆元为 7⁻¹ ≡ 23 (mod 40)。

4模幂与 RSA

反复平方法可以快速计算 aᵏ mod n:把 k 写成二进制,通过平方并取模求出 a、a²、a⁴、a⁸、… mod n,再把对应二进制位为 1 的幂相乘。

费马小定理:对于不整除 a 的素数 p,aᵖ⁻¹ ≡ 1 (mod p)。因此指数可以对 p − 1 取模。

RSA 由两个素数 p 和 q 构造密钥:

  1. n = p·q,φ(n) = (p − 1)(q − 1)。
  2. 选取满足 gcd(e, φ(n)) = 1 的 e;(n, e) 是公钥。
  3. 计算 d = e⁻¹ mod φ(n):这是私钥。
  4. 加密 c = mᵉ mod n;解密 m = cᵈ mod n。

欧拉函数 φ(n) 表示 1 到 n 中与 n 互素的数的个数:对素数 φ(p) = p − 1,φ(pᵏ) = pᵏ − pᵏ⁻¹,对互素的因数 φ 是积性的。

自测 某个 RSA 密钥使用 p = 5,q = 11,e = 3。d 是多少?
  1. 13
  2. 27
  3. 37
  4. 3

答案: 27. φ(n) = 4·10 = 40,而 3·27 = 81 = 2·40 + 1,所以 d = 27。3 模 n = 55 的逆元是 37,但 d 是对 φ(n) 取模得到的。

5常见错误

  • 对负数给出负的余数:−17 mod 5 是 3,而不是 −2。
  • 在第一个余数处就停止欧几里得算法,而不是在最后一个非零余数处。
  • 忘记给扩展算法得到的负系数加上 n。
  • 把 RSA 指数 d 对 n 取模,而不是对 φ(n) 取模。
  • 用费马定理时,把指数对 p 取模,而不是对 p − 1 取模。

6考试题是什么样的

  • 简单:最大公约数与余数。你要用欧几里得算法求最大公约数或最小公倍数,求负数的余数,并对和与积取模 n。
  • 中等:逆元与同余式。你要用扩展算法求模逆元,解线性同余方程,用中国剩余定理合并两个同余式,并计算欧拉函数 φ(n)。
  • 困难:模幂与 RSA。你要使用反复平方法和费马定理,解有多个解的同余方程,并求 RSA 的私钥指数、密文和解密后的消息。

在应用中一步一步地学在应用中一步一步地学

例题详解

例题 1简单

不要把大数乘开来求 (914·953) mod 11:先取模化简。

n = 11

求: (914·953) mod 11

显示提示
  1. (x·y) mod n = ((x mod n)·(y mod n)) mod n,和也是如此。
  2. 914 mod 11 = 1, 953 mod 11 = 7.
  3. 把余数的乘积对 11 取模。
显示答案和分步解答

整除与余数:a mod n 是满足 0 ≤ r < n 且 a = q·n + r 的余数 r,a 为负数时也是如此。欧几里得算法通过反复做 a = q·b + r 并用 (b, r) 替换 (a, b) 来求 gcd(a, b);最后一个非零余数就是最大公约数。然后 lcm(a, b) = a·b/gcd(a, b)。每一步都可以对余数取模:(a + b) mod n 和 (a·b) mod n 只取决于 a mod n 和 b mod n。

化简每个数

914 ≡ 1, 953 ≡ 7 (mod 11)

合并

1·7 = 7 ≡ 7 (mod 11)

答案

(914·953) mod 11 = 7
例题 2中等

求欧拉函数 φ(637),即 1 到 637 中与 637 互素的整数个数。

n = 637 = 72·13

求: φ(637)

显示提示
  1. 把 n 分解成素因数:637 = 72·13。
  2. 对于互素的因数 φ 是积性的,并且 φ(pᵏ) = pᵏ − pᵏ⁻¹。
  3. φ(n) = n·∏(1 − 1/p).
显示答案和分步解答

逆元与同余式:a 模 n 有逆元,当且仅当 gcd(a, n) = 1。扩展欧几里得算法把 1 写成 s·n + t·a,于是 a⁻¹ ≡ t (mod n)。当 gcd(a, n) = 1 时,同余式 a·x ≡ b (mod n) 的解为 x ≡ a⁻¹·b。模数互素的两个同余式 x ≡ r₁ (mod m₁) 和 x ≡ r₂ (mod m₂) 在模 m₁·m₂ 下有唯一解(中国剩余定理)。欧拉函数 φ(n) 表示 1 到 n 中与 n 互素的数的个数:φ(n) = n·∏(1 − 1/p)。

素因数

637 = 72·13

欧拉函数值

φ(637) = φ(49)·φ(13) = 42·12 = 504

答案

φ(637) = 504
例题 3困难
mc = me​ mod n225m = cd​ mod n?(n, e) = (481, 23)d

某个 RSA 密钥使用 p = 13,q = 37,e = 23。解密密文 c = 225:求消息 m。

p = 13q = 37e = 23c = 225

求: m

显示提示
  1. n = 481,φ(n) = 432。
  2. d = e⁻¹ mod φ(n) = 263。
  3. m = cd mod n = 225263 mod 481: 使用反复平方法.
显示答案和分步解答

模幂与 RSA:用反复平方法计算 aᵏ mod n:把 k 写成二进制,平方,每一步之后取模,并把对应二进制位为 1 的幂相乘。费马:对不整除 a 的素数 p,aᵖ⁻¹ ≡ 1 (mod p),所以指数可以对 p − 1 取模。RSA:选取素数 p 和 q,n = p·q,φ(n) = (p − 1)(q − 1);公钥指数 e 与 φ(n) 互素,私钥指数为 d = e⁻¹ mod φ(n)。用 c = mᵉ mod n 加密,用 m = cᵈ mod n 解密。

私钥指数

n = 481, φ(n) = 432
d = 23−1 mod 432 = 263

用反复平方法解密

263 = 256 + 4 + 2 + 1
2251 ≡ 225 (mod 481)
2252 ≡ 120 (mod 481)
2254 ≡ 451 (mod 481)
2258 ≡ 419 (mod 481)
22516 ≡ 477 (mod 481)
22532 ≡ 16 (mod 481)
22564 ≡ 256 (mod 481)
225128 ≡ 120 (mod 481)
225256 ≡ 451 (mod 481)
225263 ≡ 225·120·451·451 ≡ 361 (mod 481)

消息

m = 361
校核: 36123 mod 481 = 225

答案

m = 361

问与答

什么是数论与模运算?

用 n 除 a 得到商 q 和余数 r:a = q·n + r,0 ≤ r < n。余数记作 a mod n。对于负数,商也为负:−3 = −1·7 + 4,所以 −3 mod 7 = 4。

当两个数除以 n 的余数相同,即 n 整除 a − b 时,它们对模 n 同余,记作 a ≡ b (mod n)。

数论与模运算题目如何一步步求解?
  1. 先把每个数对 n 取模;余数在 0 到 n − 1 之间。
  2. 求最大公约数时,用欧几里得算法反复做除法;最后一个非零余数就是最大公约数。
  3. 求逆元时,运行扩展算法并保留 a 的系数;若为负数则加上 n。
  4. 解 a·x ≡ b 时,两边乘以 a⁻¹;合并两个同余式时,写成 x = r₁ + m₁k。
  5. 求幂时,把指数写成二进制并反复平方;在 RSA 中,d = e⁻¹ mod φ(n),其中 φ(n) = (p − 1)(q − 1)。
数论与模运算有哪些常见错误?
  • 对负数给出了负的余数。
  • 在第一个余数处就停止欧几里得算法。
  • 让逆元保持为负数,而不是加上 n。
  • 把 RSA 指数 d 对 n 取模,而不是对 φ(n) 取模。
  • 用费马定理时,把指数对 p 取模,而不是对 p − 1 取模。
数论与模运算练习包括哪些内容?
  • 简单: 最大公约数与余数
  • 中等: 逆元与同余式
  • 困难: 模幂与 RSA

每道题的数值都不同,让你掌握方法,而不是记住答案。 卡住了?先打开一个小提示,需要时再查看完整解析。

练习方式

  • 每道题的数值都不同,让你掌握方法,而不是记住答案。
  • 卡住了?先打开一个小提示,需要时再查看完整解析。
  • 你的进度、错题和收藏的题目都会保留,方便考前复习。

包含此主题的课程

数学与统计中的更多主题

可打印练习卷

免费练习数论与模运算立即练习数论与模运算每天 5 道免费题目,无需绑定银行卡。