第三章
模指数运算
迭代版:
int Mod_exp(int a, int b, int m)
{
int res = 1;
while(b)
{
if(b & 1) res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}
递归版:
int Mod_exp(int a, int b, int m)
{
if(!b) return 1;
int t = Mod_exp(a, b / 2, m);
if(b & 1) return t * t * a % m;
return t * t % m;
}
乘法逆元的求取
int Mul_inverse(int a, int m)
{
//a模m的乘法逆元存在的充要条件是:a,m互素
//a,m不互素说明不存在乘法逆元
if(gcd(a, m) != 1) return 0;
//求乘法逆元的本质是egcd
int r1 = 1, s1 = 0, r2 = 0, s2 = 1, tm = m;
while(m)
{
int q = a / m, t = a % m, tr = r1, ts = s1;
r1 = r2, s1 = s2, a = m;
r2 = tr - q * r1, s2 = ts - q * s1, m = t;
}
//答案要求正整数,原理不赘述
while(r1 < 0) r1 += tm;
return r1;
}
第四章
题1
题目:设
p
=
23
p = 23
p=23 和
a
=
3
a = 3
a=3,使用费尔马小定理计算
a
2019
m
o
d
p
a^{2019}\bmod p
a2019modp.
计算过程:
注意到
a
≢
0
(
m
o
d
p
)
a\not\equiv 0\pmod p
a≡0(modp) 且
p
p
p 是素数,由费马小定理知:
a
22
≡
1
(
m
o
d
p
)
a^{22}\equiv 1\pmod {p}
a22≡1(modp)
故:
a
2019
≡
a
22
×
91
+
17
≡
a
17
(
m
o
d
p
)
a^{2019}\equiv a^{22\times 91+17}\equiv a^{17}\pmod p
a2019≡a22×91+17≡a17(modp)
接下来使用快速幂手算即可:
a
4
≡
81
≡
12
(
m
o
d
23
)
a^{4}\equiv81\equiv 12\pmod {23}
a4≡81≡12(mod23)
a
8
≡
1
2
2
≡
6
(
m
o
d
23
)
a^8\equiv 12^2\equiv 6\pmod {23}
a8≡122≡6(mod23)
a
16
≡
6
2
≡
13
(
m
o
d
23
)
a^{16}\equiv 6^2\equiv 13\pmod {23}
a16≡62≡13(mod23)
a
17
≡
a
16
⋅
a
≡
13
×
3
≡
16
(
m
o
d
23
)
a^{17}\equiv a^{16} \cdot a\equiv 13 \times3\equiv 16\pmod{23}
a17≡a16⋅a≡13×3≡16(mod23)
故答案为
16
16
16.
题5
题目:请证明
13
13
13 整除
2
70
+
3
70
2^{70}+3^{70}
270+370.
证明过程:
注意到
2
≢
0
(
m
o
d
13
)
2\not\equiv 0\pmod {13}
2≡0(mod13) 且
13
13
13 是素数,由费马小定理知:
2
12
≡
1
(
m
o
d
13
)
2^{12}\equiv 1\pmod {13}
212≡1(mod13)
同理有:
3
12
≡
1
(
m
o
d
13
)
3^{12}\equiv 1\pmod {13}
312≡1(mod13).
因而有:
2
70
≡
2
12
×
5
+
10
≡
2
10
≡
1024
≡
10
(
m
o
d
13
)
2^{70}\equiv 2^{12\times 5+10}\equiv 2^{10}\equiv1024\equiv10\pmod {13}
270≡212×5+10≡210≡1024≡10(mod13)
3
70
≡
3
12
×
5
+
10
≡
3
10
≡
(
3
3
)
3
×
3
≡
3
(
m
o
d
13
)
3^{70}\equiv3^{12\times5+10}\equiv3^{10}\equiv(3^3)^3\times 3\equiv3\pmod {13}
370≡312×5+10≡310≡(33)3×3≡3(mod13)
进而:
2
70
+
3
70
≡
10
+
3
≡
0
(
m
o
d
13
)
2^{70}+3^{70}\equiv 10+3\equiv0\pmod {13}
270+370≡10+3≡0(mod13)
即:
13
∣
(
2
70
+
3
70
)
13\mid (2^{70}+3^{70})
13∣(270+370).
题6
题目:使用欧拉定理计算
2
100000
m
o
d
55
2^{100000}\bmod 55
2100000mod55.
计算过程:
注意到
2
2
2 和
55
55
55 互素,由欧拉定理知:
2
ϕ
(
55
)
≡
1
(
m
o
d
55
)
2^{\phi(55)}\equiv 1\pmod {55}
2ϕ(55)≡1(mod55)
不难计算
ϕ
(
55
)
=
55
×
(
1
−
1
5
)
×
(
1
−
1
11
)
=
40
\phi(55)=55\times (1-\frac{1}{5})\times (1-\frac{1}{11})=40
ϕ(55)=55×(1−51)×(1−111)=40
因而:
2
40
≡
1
(
m
o
d
55
)
2^{40}\equiv 1\pmod {55}
240≡1(mod55)
进而有:
2
100000
≡
2
40
×
2500
≡
1
(
m
o
d
55
)
2^{100000}\equiv 2^{40\times 2500}\equiv1\pmod {55}
2100000≡240×2500≡1(mod55)
即答案为
1
1
1.
题8
题目:手动计算
7
1000
7^{1000}
71000 的最后两个数位等于什么?
计算过程:
题即:
7
1000
≡
?
(
m
o
d
100
)
7^{1000}\equiv ?\pmod{100}
71000≡?(mod100)
注意到
7
7
7 和
100
100
100 互素,由欧拉定理知:
7
ϕ
(
100
)
≡
1
(
m
o
d
100
)
7^{\phi(100)}\equiv 1\pmod {100}
7ϕ(100)≡1(mod100)
不难计算
ϕ
(
100
)
=
100
×
(
1
−
1
2
)
×
(
1
−
1
5
)
=
40
\phi(100)=100\times (1-\frac{1}{2})\times (1-\frac{1}{5})=40
ϕ(100)=100×(1−21)×(1−51)=40
因而:
7
40
≡
1
(
m
o
d
100
)
7^{40}\equiv 1\pmod {100}
740≡1(mod100)
进而有:
7
1000
≡
7
40
×
25
≡
1
(
m
o
d
100
)
7^{1000}\equiv 7^{40\times 25}\equiv1\pmod {100}
71000≡740×25≡1(mod100)
即答案为
1
1
1.