第十章
题1
题目:
运用 CRT 求解:
x
≡
8
(
m
o
d
11
)
x ≡ 8 \pmod {11}
x≡8(mod11)
x
≡
3
(
m
o
d
19
)
x ≡ 3 \pmod {19}
x≡3(mod19)
解答:
19
19
19 模
11
11
11 的乘法逆元为
7
7
7,
11
11
11 模
19
19
19 的乘法逆元为
7
7
7,
利用 CRT 有:
x
≡
8
×
19
×
7
+
3
×
11
×
7
≡
41
(
m
o
d
201
)
x\equiv 8\times19 \times 7+3\times11\times7\equiv41\pmod{201}
x≡8×19×7+3×11×7≡41(mod201)
题2
题目:
运用 CRT 求解:
x
≡
1
(
m
o
d
5
)
x ≡ 1 \pmod 5
x≡1(mod5)
x
≡
2
(
m
o
d
7
)
x ≡ 2 \pmod 7
x≡2(mod7)
x
≡
3
(
m
o
d
9
)
x ≡ 3 \pmod 9
x≡3(mod9)
x
≡
4
(
m
o
d
11
)
x ≡ 4 \pmod {11}
x≡4(mod11)
解答:
设上述第
i
i
i 条同余方程为
x
≡
a
i
(
m
o
d
m
i
)
,
i
∈
{
1
,
2
,
3
,
4
}
x\equiv a_i\pmod {m_i}, i\in\{1,2,3,4\}
x≡ai(modmi),i∈{1,2,3,4}
a i a_i ai | b i = ( ∏ 1 n m i ) / m i b_i=(\prod_{1}^{n}m_i)/m_i bi=(∏1nmi)/mi | b i b_i bi 模 m 的乘法逆元 |
---|---|---|
1 | 693 | 2 |
2 | 495 | 3 |
3 | 385 | 4 |
4 | 315 | 8 |
故
x
≡
∑
i
=
1
n
a
i
b
i
b
i
−
1
≡
1731
(
m
o
d
3465
)
x\equiv \sum_{i=1}^n a_ib_ib_i^{-1}\equiv1731\pmod {3465}
x≡i=1∑naibibi−1≡1731(mod3465)
题3
题目:手动计算
200
0
2019
(
m
o
d
221
)
2000^{2019} \pmod {221}
20002019(mod221),不允许使用电脑或者其他电子设备。[提示:这是一道看上去与中国剩余定理无关的计算题。]
解答:
利用群同构转化即可.
设 n = p q n = pq n=pq, p > 1 p > 1 p>1 和 q > 1 q > 1 q>1 是两个互素的正整数,则有: Z n ∗ ≅ Z p ∗ × Z q ∗ . Z_n^{*}\cong Z_p^{*}\times Z_q^{*}. Zn∗≅Zp∗×Zq∗.
由于
221
=
13
×
17
221=13\times17
221=13×17,再由上述命题可知:
Z
221
∗
≅
Z
13
∗
×
Z
17
∗
Z_{221}^{*}\cong Z_{13}^{*}\times Z_{17}^{*}
Z221∗≅Z13∗×Z17∗.
故:
2000
↔
(
2000
m
o
d
13
,
2000
m
o
d
17
)
↔
(
11
,
11
)
2000\leftrightarrow (2000\bmod13,2000\bmod17)\leftrightarrow (11,11)
2000↔(2000mod13,2000mod17)↔(11,11).
又
(
11
,
11
)
2019
=
(
1
1
12
×
168
+
3
,
1
1
16
×
126
+
3
)
=
(
1
1
3
,
1
1
3
)
=
(
5
,
5
)
(11,11)^{2019}=(11^{12\times168+3},11^{16\times126+3})=(11^3,11^3)=(5,5)
(11,11)2019=(1112×168+3,1116×126+3)=(113,113)=(5,5),其中第二个等号由费尔马小定理可知.
不难发现
5
↔
(
5
,
5
)
5\leftrightarrow (5,5)
5↔(5,5),故答案为
5
5
5.
题7
题目:实现一个利用 CRT 求解同余方程的程序(Python 或者 C 语言都可以)。
代码如下:
//一共n条同余方程,同余方程为 x≡a(mod b)
int n, a[15], b[15];
//(套egcd模板)求x的乘法逆元
int mul_inverse(int x, int a)
{
int r0 = 1, s0 = 0, r1 = 0, s1 = 1;
while(a)
{
int tr = r0, ts = s0, t = x % a, q = x / a;
r0 = r1, s0 = s1, x = a;
r1 = tr - q * r1, s1 = ts - q * s1, a = t;
}
return r0;
}
//套crt公式
long long crt(int a[], int b[], int n)
{
long long ans = 0;
long long B = 1;//B是同余方程所有b的乘积
for(int i = 0; i < n; i ++ ) B *= b[i];
for(int i = 0; i < n; i ++ )
{
ans += a[i] * (B / b[i]) * mul_inverse(B / b[i] % b[i], b[i]) % B;
}
return ans % B;
}