1 求乘法逆元的函数
def mul_reverse_element(a,m):
r0,r1,s0,s1=1,0,0,1
b=m
while(b):
q,a,b=a//b,b,a%b
r0,r1=r1,r0-q*r1
if a!=1:
return -1;
else:
return (r0+m)%m;
2 模指数运算
def rec_mod_exp(x, y, p):
if(y==0):
return 1
z = rec_mod_exp(x, y//2, p)
if(y&1==0):
return z*z %p
else:
return x*z*z %p
3 设p = 23和a = 3,使用费尔马小定理计算a^{2019} mod p
由费尔马小定理 a p − 1 a^{p-1} ap−1 ≡ 1 (mod p), a 22 a^{22} a22 ≡ 1 mod 23 , 原式 3^{2019} mod 23 ≡ 3 91 ∗ 22 + 7 3^{91*22+7} 391∗22+7mod 23,得 3 7 3^{7} 37 ≡ 1 mod 23,又27 ≡ 4 mod 23,所以, 3 3 ∗ 3 3 ∗ 3 11 ∗ 3^{3}*3^{3}*3^{11}* 33∗33∗311∗ ≡ 2 4 ∗ 2 6 ∗ 3 2 2^{4}*2^{6}*3^{2} 24∗26∗32 mod 23, 又 3 11 3^{11} 311 ≡ 2 6 ∗ 3 2 2^{6}*3^{2} 26∗32 ,所以,原式= 3 3 3^{3} 33 ≡ 2 4 2^{4} 24 mod 23 =16
4 使用欧拉定理计算2^{100000} mod 55
依题意,由欧拉 Phi 函数 ϕ(55) = 40,所以 由欧拉定理, a ϕ ( n ) a^{ϕ(n)} aϕ(n) ≡ 1 (mod n),因为 g c d ( 2 , 55 ) = 1 gcd(2,55)=1 gcd(2,55)=1,所以 2 40 2^{40} 240 ≡ 1 (mod 55),又 2 100000 = 2 40 ∗ 2500 2^{100000}=2^{40*2500} 2100000=240∗2500 ,所以, 2 100000 2^{100000} 2100000 ≡ 1 mod 55 =1。
5 7^{1000}最后两位数
不会做,找规律吧(羞耻), 7 1 = 07 7^1=07 71=07, 7 2 = 49 7^2=49 72=49, 7 3 = 343 7^3=343 73=343, 7 4 = 2401 7^4=2401 74=2401, 7 5 = 16807 7^5=16807 75=16807, 7 6 = 117649 7^6=117649 76=117649,…所以 7 1000 7^{1000} 71000的最后两位是01