CINTA 作业三
-
设 p = 23 p=23 p=23 和 a = 3 a=3 a=3,使用费马小定理计算 a 2019 m o d p a^{2019}\mod p a2019modp ?
由题意可知:
a 2019 m o d p ⟺ 3 22 ∗ 91 + 17 ≡ 3 17 ( m o d 23 ) a^{2019}\mod p\iff 3^{22*91+17}\equiv 3^{17}(\mod 23) a2019modp⟺322∗91+17≡317(mod23)
又有: 3 17 ≡ 3 − 5 ( m o d 23 ) 3^{17}\equiv 3^{-5}(\mod 23) 317≡3−5(mod23)
设 c = 3 c=3 c=3 则有: c c − 1 ≡ 1 ( m o d 23 ) cc^{-1}\equiv 1(mod 23) cc−1≡1(mod23)
由扩展欧几里得定理得: c − 1 = 8 c^{-1}=8 c−1=8
又因为 g c d ( 8 , 23 ) = 1 gcd(8,23)=1 gcd(8,23)=1 ,可以得到:
原式为: 8 5 m o d 23 = 16 8^5\mod 23=16 85mod23=16
-
使用费马小定理求解同余方程 x 50 ≡ 2 ( m o d 17 ) x^{50}\equiv 2(\mod 17) x50≡2(mod17)。
由题意得:
x 50 m o d 17 ⟺ x 3 ∗ 16 + 2 ≡ x 2 ( m o d 17 ) x^{50}\mod 17\iff x^{3*16+2}\equiv x^2(\mod 17) x50mod17⟺x3∗16+2≡x2(mod17)
所以原式为: x 2 ≡ 2 ( m o d 17 ) x^2\equiv 2(\mod 17) x2≡2(mod17)
那么: x 2 − 2 = k ∗ 17 ( k ∈ Z ) x^2-2=k*17(k\in Z) x2−2=k∗17(k∈Z)
所以当k为2时: x = ± 6 x=\pm 6 x=±6
-
请证明 13 整除 2 70 + 3 70 2^{70}+3^{70} 270+370
要证: 13 ∣ ( 2 70 + 3 70 ) 13 | (2^{70}+3^{70}) 13∣(270+370)
只需证: 2 70 + 3 70 ≡ 0 ( m o d 13 ) 2^{70}+3^{70}\equiv 0(\mod 13) 270+370≡0(mod13)
因为 g c d ( 2 , 13 ) = g c d ( 3 , 13 ) = 1 gcd(2,13)=gcd(3,13)=1 gcd(2,13)=gcd(3,13)=1:
所以原式可以等价为: ( 2 70 m o d 13 ) + ( 3 70 m o d 13 ) (2^{70}\mod 13)+(3^{70}\mod 13) (270mod13)+(370mod13)
再由费马小定理得原式为: ( 2 − 2 m o d 13 ) + ( 3 − 2 m o d 13 ) (2^{-2}\mod 13)+(3^{-2}\mod 13) (2−2mod13)+(3−2mod13)
由拓展欧几里得定理得 2 和 3 的乘法逆元:分别为 -6 和 -4
那么原式又变作: ( 36 m o d 13 ) + ( 16 m o d 13 ) (36\mod 13)+(16\mod 13) (36mod13)+(16mod13)
由同模数加法得原式为: 52 m o d 13 = 0 52\mod 13=0 52mod13=0
综上所述: 13 整除 2 70 + 3 70 2^{70}+3^{70} 270+370
-
使用欧拉定理计算 2 100000 m o d 55 2^{100000}\mod 55 2100000mod55
由原式可知:
p = 55 , p p=55, p p=55,p 不为素数
但 p = 5 ∗ 11 p=5*11 p=5∗11 二者均为素数
那么, ϕ ( 5 ) = 5 − 1 = 4 \phi(5)=5-1=4 ϕ(5)=5−1=4 ,而 ϕ ( 11 ) = 11 − 1 = 10 \phi(11)=11-1=10 ϕ(11)=11−1=10
再有 g c d ( 5 , 11 ) = 1 gcd(5,11)=1 gcd(5,11)=1
由欧拉 P h i Phi Phi 公式:
ϕ ( 55 ) = ϕ ( 5 ) ∗ ϕ ( 11 ) = 40 \phi(55)=\phi(5)*\phi(11)=40 ϕ(55)=ϕ(5)∗ϕ(11)=40
因为 g c d ( 2 , 55 ) = 1 gcd(2,55)=1 gcd(2,55)=1 得: 2 100000 ≡ 2 100000 m o d ϕ ( 55 ) ( m o d 55 ) 2^{100000}\equiv 2^{100000\mod\phi(55)}(\mod 55) 2100000≡2100000modϕ(55)(mod55)
所以原式为: 2 100000 ≡ 2 0 ( m o d 55 ) = 1 2^{100000}\equiv 2^0(\mod 55)=1 2100000≡20(mod55)=1
-
手动计算 7 1000 7^{1000} 71000 的最后两个数位等于什么?
由题意知:所求数为 7 1000 m o d 100 7^{1000}\mod 100 71000mod100
据欧拉定理: ϕ ( 100 ) = ϕ ( 4 ) ∗ ϕ ( 25 ) = 40 \phi(100)=\phi(4)*\phi(25)=40 ϕ(100)=ϕ(4)∗ϕ(25)=40
因为 g c d ( 7 , 100 ) = 1 gcd(7,100)=1 gcd(7,100)=1 得: 7 1000 ≡ 7 1000 m o d ϕ ( 100 ) ( m o d 100 ) 7^{1000}\equiv 7^{1000\mod\phi(100)}(\mod 100) 71000≡71000modϕ(100)(mod100)
所以结果为: 7 1000 m o d = 1 7^{1000}\mod=1 71000mod=1 ,最后两个数位为: 01
-
编写 Python 语言程序完成欧拉 P h i Phi Phi 函数的计算,即输入正整数 n n n,计算并返回 ϕ ( n ) \phi(n) ϕ(n)。
import math
# 朴素的欧拉函数
def classic_Euler(n):
num = 1
for i in range(2, n):
if math.gcd(i, n) == 1:
num += 1
return num
# 优化欧拉函数
def obb_judge(n):
li = []
for num in range(2, n + 1):
flag = 0
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
flag = 1
# print('{} % {} == {}'.format(num, i, num % i))
if flag == 0:
li.append(num)
return li
def new_Euler(n):
p = obb_judge(n)
if n in p:
return n - 1
else:
ret = 0 + n
for i in range(0, len(p)):
if ret % p[i] == 0:
n -= n // p[i]
# print('n: ',n)
while ret % p[i] == 0:
ret //= p[i]
# print('ret: ',ret)
return n
- 设
p
p
p 是素数,计算
(
p
−
1
)
!
m
o
d
p
(p-1)!\mod p
(p−1)!modp,并找出规律,写成定义,并给出证明。
# 测试计算使用代码
import math
def obb_judge(n):
li = []
for num in range(2, n + 1):
flag = 0
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
flag = 1
# print('{} % {} == {}'.format(num, i, num % i))
if flag == 0:
li.append(num)
return li
def factorial(m):
re = 1
for i in range(1, m + 1):
re *= i
return re
def fac_to_mode(p):
if p in obb_judge(p):
return factorial(p - 1) % p
else:
return -1
if __name__ == '__main__':
m = eval(input('p: '))
for j in range(2, m):
if fac_to_mode(j) != -1:
print('#{}: {}'.format(j, fac_to_mode(j)))
【补充】这里发现一个令人疑惑的地方,直接使用 in range (2,int(math.sqrt(n))+1)
的条件会误判 5、7、11等等数为因子的倍数为素数,因此这里使用上一段代码的判定方式。
# 运行结果:
p: 128
#2: 1
#3: 2
#5: 4
#7: 6
#11: 10
#13: 12
#17: 16
#19: 18
#23: 22
...
#103: 102
#107: 106
#109: 108
#113: 112
#127: 126
这里我们发现对
(
p
−
1
)
!
m
o
d
p
=
p
−
1
(p-1)!\mod p = p-1
(p−1)!modp=p−1 于是原问题变为:求证:当
p
p
p 为素数时,
(
p
−
1
)
!
≡
(
p
−
1
)
(
m
o
d
p
)
(p-1)!\equiv(p-1)(\mod p)
(p−1)!≡(p−1)(modp) 且只当
p
p
p 为素数时(威尔逊定理)
证明:
(1)
p
p
p 为素数时,总有
(
p
−
1
)
!
≡
(
p
−
1
)
(
m
o
d
p
)
(p-1)!\equiv(p-1)(\mod p)
(p−1)!≡(p−1)(modp)
(
p
−
1
)
!
≡
(
p
−
1
)
(
m
o
d
p
)
(p-1)!\equiv(p-1)(\mod p)
(p−1)!≡(p−1)(modp) 与
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)!\equiv{-1}(\mod p)
(p−1)!≡−1(modp) 等同
对于
p
=
2
p=2
p=2 此结论总成立
对于
p
=
3
p=3
p=3 此结论也显然成立
而其余质数
p
p
p 满足
p
m
o
d
2
=
1
,
p
≥
5
p\mod 2=1, p\geq 5
pmod2=1,p≥5 :
假设一数
1
<
a
≤
(
p
−
1
)
1 < a \leq (p-1)
1<a≤(p−1) (因为
a
a
a 总是在此区间内存在 [
p
p
p 为素数])
那么:
a
∈
M
(
M
=
{
x
∣
2
≤
x
≤
(
p
−
2
)
}
)
a\in M (M=\{x|2\leq x\leq (p-2)\})
a∈M(M={x∣2≤x≤(p−2)})
再设:
N
=
{
y
∣
y
=
x
∗
a
,
x
∈
M
}
N=\{y|y=x*a,x\in M\}
N={y∣y=x∗a,x∈M}
那么显然可知:由
M
→
N
M \to N
M→N 是双射的(当
a
a
a 是常数时)
设方程
x
∗
a
≡
1
(
m
o
d
p
)
x*a\equiv 1(\mod p)
x∗a≡1(modp) ,由以上结论可知:
我们只能找到一个
x
x
x 与一个
a
a
a 一一对应此方程:
x
∗
a
≡
1
(
m
o
d
p
)
x*a\equiv 1(\mod p)
x∗a≡1(modp)
所以有以下所有方程:
1
∗
a
1
m
o
d
p
=
1
1*a_1\mod p =1
1∗a1modp=1
2
∗
a
2
m
o
d
p
=
1
2*a_2\mod p=1
2∗a2modp=1
…
(
p
−
2
)
∗
a
p
−
2
m
o
d
p
=
1
(p-2)*a_{p-2}\mod p=1
(p−2)∗ap−2modp=1
又因
p
p
p 为素数:
所以总有:
g
c
d
(
a
i
,
p
)
=
1
gcd(a_i,p)=1
gcd(ai,p)=1
那么对于上述方程都有:
n
∗
a
n
≡
n
(
m
o
d
p
)
n*a_n\equiv n(\mod p)
n∗an≡n(modp)
对于所有
n
n
n 都有
gcd
(
n
,
p
)
=
1
\gcd(n,p)=1
gcd(n,p)=1
所以由乘法原理:
(
p
−
1
)
!
≡
(
p
−
1
)
(
m
o
d
p
)
(p-1)!\equiv(p-1)(\mod p)
(p−1)!≡(p−1)(modp) 成立
原式得证
(2)
(
p
−
1
)
!
≡
(
p
−
1
)
(
m
o
d
p
)
(p-1)!\equiv(p-1)(\mod p)
(p−1)!≡(p−1)(modp) 成立时,
p
p
p 为素数
假设:
p
p
p 不为素数,那么必然有
∃
a
,
b
≤
p
\exist a, b\leq p
∃a,b≤p
那么:原式为
(
p
−
1
)
!
=
1
∗
2
∗
3
∗
.
.
.
∗
a
∗
.
.
.
∗
b
∗
.
.
.
∗
(
p
−
1
)
m
o
d
p
(p-1)!=1*2*3*...*a*...*b*...*(p-1)\mod p
(p−1)!=1∗2∗3∗...∗a∗...∗b∗...∗(p−1)modp
因此其中总存在:
gcd
(
a
∗
b
,
p
)
≠
1
\gcd(a*b,p)\neq 1
gcd(a∗b,p)=1
所以总有:
(
p
−
1
)
!
≡
0
(
m
o
d
p
)
(p-1)!\equiv0(\mod p)
(p−1)!≡0(modp)
与原式等同的
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)!\equiv{-1}(\mod p)
(p−1)!≡−1(modp) 不符
所以
p
p
p 必然为素数