定理1:
p为素数,任取1<a<p,对所有的1<i<p,计算a*i modp,所得到的数是1-p-1之间所有整数的一次置换
即
S={a*i mod p,1<i<p}
与
S={1,2,3,....p-1}等价
在定理中要求1<a<p这与要求a mod p!=0并不相同,后者的意思是a不能整除p但是a可以比p大,而前者只是后者的一部分;可以说两者是包含关系;
证明思路:
假设存在两个不同的数满足定理,容易知道a与p的gcd为1,可以使用消去律,得到是一个矛盾的结果所以不满足
费尔马小定理
假设p为素数,设a为任意数,则(a^(p-1)-1)mod p=k;
常用来计算a^n (mod p);
eg 3^2018(mod 17)=3^2(mod 17)=9;
定理1成立的条件是a与p互素,如果不满足这个条件其实是不成立的
欧拉定理
设a和n为正整数,gcd(a,n)=1,则(a^φ(n)-1)modp=k;
定理2:欧拉phi函数
(返回1<b<n中与p互为素数的个数)
φ(n)={b:1<b<n且gcd(b,n)=1}
性质φ
(1)如果p是素数,则φ(p)=p-1;
φ(p^k)=p^k-p^(k-1);(与p不互素,其实就是p的倍数,p,2p,3p...p^(k-1)*p;)
定理3:
如果gcd(a,n)=1,且gcd(a,m)=1则gcd(a,mn)=1
定理4:
欧拉phi函数公式(积性函数)
设m和n是互素的正整数,则φ(mn)=φ(m)*φ(n);
推论1:
m=素数指数的乘积;
φ(m)=分别素数指数的乘积的phi函数相乘
推论2:
m=素数指数的乘积;
φ(m)=m*分别(1-素数指数的底的倒数)的相乘
习题:
1.设p=23,a=3使用费马小定理计算a^2019mod p?
2019=22*91+17;
3^2019mod 23=3^17mod23;
3^3mod23=4;
3^6mod23=4*4mod 23=16;
3^8mod23=4=9*4*4mod 23=6;
3^16mod23=6*6mod 23=13;
3^17mod 23=3*13mod 23=16;
2使用费尔马小定理求解同余方程(x^50-2)mod 17=k;
50=17*2+16;
原式=(x^16-2)mod17
所以
x=2^(1/16)mod 17;
3请证明13整除2^70+3^70;
证明:
2^70mod13,
由费尔马小定理得
(1)2^70mod 3=2^(12*5+10)mod13=2^10mod13=10
(2)3^70mod13=3^(12*5+10)mod13=3^10mod13=3
所以
(1)+(2)=13,即可被13整除
因此得以证明;
4使用欧拉定理计算2^100000mod 55;
φ(55)=40;
所以(2^40-1)mod p=k;
100000=40*2500;
所以2^100000mod 55=2^0mod55=1;
5 手动计算7^1000的最后两个数位是什么?
假设只取小数点左两位
7^1=07, 7^2=49, 7^3=43, 7^4=01
7^5=07, 7^6=49, 7^7=43, 7^8=01;
...
由此可以找出规律
4个为一周期
1000=4*250;
所以7^1000的最后两位为01;
6设p为素数,计算(p-1)!modp并找出规律,写成定理,并给出证明
p=2
(p-1)!modp= 1mod 2=1;
p=3
(p-1)!modp= 1*2mod 3=2;
p=5
(p-1)!modp= 1*2*3*4mod 5=4;
p=7;
(p-1)!modp= 1*2*3*4*5*6mod 7=6;
...
由此可以发现规律
(p-1)!modp=p-1;
定理:如果p为素数,(p-1)!modp=p-1;
证明:
p=2,命题显然成立;
p=3,命题显然成立;
假设B中被p除余一的数是γa:
一若γ=1,则γa=a,它被p除余a,又因为a不等于1,所以γ=1不成立;
二若γ=p-1,则γa=(p-1)a,它被p除余p-a,又因为a不等于p-1,所以γ=p-1不成立;
由一二三知γ≠a且a,γ∈A。
a不同时,γ也相异;若a1≠a2, a1,a2∈A,且γa1≡γa2≡1(mod p),因,γa1,γa2∈B,而B中的元素关于mod p不同余,可见a1≠a2,则γ1≠γ2。
即A中的每一个a均可找到与其配对的y,γ∈A使ay≡1(mod p),
又,a不同时,γ也相异。
因此,A中的偶数个(p-3个)元素可以分成(p-3)/2个二元组(a,y),每个二元组都满足ay≡1(mod p),
∴ 1×2×3×4....(p-2)≡1(mod p)
p-1≡-1(mod p)
∴ (p-1)!≡-1(mod p)
从而p可整除(p-1)!+1
假如p不是素数
当p=4时(p-1)!modp=1*2*3mod4=2;显然结论不成立
7 编写python程序完成欧拉函数phi的计算,即输入正整数n计算并返回φ(n)
def euler_function(n):
j = 0
"""欧几里得算法求是否与n互素"""
for i in range(2, n):
a = n
q = i
r = a % i
while r != 1 and r != 0:
a = int(q)
q = int(r)
r = int(a) % int(q)
"""如果互素则计数+1"""
if r == 1:
j += 1
elif r == 0:
pass
print(j)
if __name__ == '__main__':
"""主函数进行调用"""
n = int(input("请输入欧拉函数的n"))
euler_function(n)