第1题
x
=
8
∗
19
∗
1
9
−
1
+
3
∗
11
∗
1
1
−
1
x=8*19*19^{-1}+3*11*11^{-1}
x=8∗19∗19−1+3∗11∗11−1
m
o
d
(
11
∗
19
)
mod(11*19)
mod(11∗19)
(1) 算
1
9
−
1
19^{-1}
19−1
19
m
o
d
11
=
8
19mod11=8
19mod11=8
8
∗
1
9
−
1
≡
1
(
m
o
d
11
)
8*19^{-1}≡ 1(mod 11)
8∗19−1≡1(mod11)
1
9
−
1
=
7
19^{-1}=7
19−1=7
(2) 算
1
1
−
1
11^{-1}
11−1
11
∗
1
1
−
1
≡
1
(
m
o
d
19
)
11*11^{-1}≡ 1(mod 19)
11∗11−1≡1(mod19)
1
1
−
1
=
7
11^{-1}=7
11−1=7
所以:
x
=
8
∗
19
∗
7
+
3
∗
11
∗
7
(
m
o
d
11
∗
19
)
=
41
x=8*19*7+3*11*7(mod11*19)=41
x=8∗19∗7+3∗11∗7(mod11∗19)=41
第2题
M
=
5
∗
7
∗
9
∗
11
=
3465
M=5*7*9*11=3465
M=5∗7∗9∗11=3465
b
1
=
M
/
5
=
693
b_1=M/5=693
b1=M/5=693
b
2
=
M
/
7
=
495
b_2=M/7=495
b2=M/7=495
b
3
=
M
/
9
=
385
b_3=M/9=385
b3=M/9=385
b
4
=
M
/
11
=
315
b_4=M/11=315
b4=M/11=315
x
=
1
∗
693
∗
69
3
−
1
+
2
∗
495
∗
49
5
−
1
+
3
∗
385
∗
38
5
−
1
+
4
∗
315
∗
31
5
−
1
(
m
o
d
3465
)
x=1*693*693^{-1}+2*495*495^{-1}+3*385*385^{-1}+4*315*315^{-1}(mod3465)
x=1∗693∗693−1+2∗495∗495−1+3∗385∗385−1+4∗315∗315−1(mod3465)
x
=
1
∗
693
∗
3
+
2
∗
495
∗
1
+
3
∗
385
∗
2
+
4
∗
315
∗
4
(
m
o
d
3465
)
=
1731
x=1*693*3+2*495*1+3*385*2+4*315*4(mod3465)=1731
x=1∗693∗3+2∗495∗1+3∗385∗2+4∗315∗4(mod3465)=1731
第3题
200
0
2019
=
4
0
2019
∗
5
0
2019
2000^{2019}=40^{2019}*50^{2019}
20002019=402019∗502019
221
=
13
∗
17
221=13*17
221=13∗17
4
0
2019
(
m
o
d
221
40^{2019}(mod221
402019(mod221)=[
1
2019
1^{2019}
12019(mod13},
6
2019
6^{2019}
62019(mod17}]=[1,
6
3
6^3
63(mod17)]=[1,12]
5
0
2019
(
m
o
d
221
50^{2019}(mod221
502019(mod221)=[
1
1
2019
11^{2019}
112019(mod13},
1
6
2019
16^{2019}
162019(mod17}]=[
1
1
3
11^3
113(mod13),
1
6
3
16^3
163(mod17)]=[5,16]
200
0
2019
2000^{2019}
20002019(mod211)=[5(mod13),
12
∗
16
12*16
12∗16(mod)17]=[5,5]=5
第7题
#include<iostream>
using namespace std;
//逆元
int modInverse(int a, int m) {
int m0 = m, t, q;
int x0 = 0, x1 = 1;
if (m == 1)
return 0;
while (a > 1) {
q = a / m;
t = m;
m = a % m, a = t;
t = x0;
x0 = x1 - q * x0;
x1 = t;
}
if (x1 < 0)
x1 += m0;
return x1;
}
//CRT
int CRT(int num, int* m, int* n) {
int ans = 0;
//M
int M = 1;
for (int i = 0; i < num; i++) {
M = M * n[i];
}
//b[i]
int b[1000];
for (int i = 0; i < num; i++) {
b[i] = M / n[i];
}
for (int i = 0; i < num; i++) {
ans += (modInverse(b[i], n[i])) * b[i] * m[i];
}
ans = ans % M;
return ans;
}
int main() {
int m[1000], n[1000];
cout << "请输入方程个数:";
int num;
cin >> num;
cout << "请按x ≡ m (mod n)输入m和n,中间用空格隔开" << endl;
for (int i = 0; i < num; i++) {
cin >> m[i] >> n[i];
}
cout << "答案是" << CRT(num, m, n);
return 0;
}