MODULAR ARITHMETIC 模算术
最大公约数
两个整数的最大公约数等于其中较小的数和两数相除的余数的最大公约数
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
扩展欧几里得算法 Extended GCD
扩展欧几里得算法是查找整数的有效方法,使得a
b
u v
a * u + b * v = gcd(a,b)
def ext_gcd(a, b): #扩展欧几里得算法
if b == 0:
return 1, 0, a
else:
x, y, gcd = ext_gcd(b, a % b) #递归直至余数等于0(需多递归一层用来判断)
x, y = y, (x - (a // b) * y) #辗转相除法反向推导每层a、b的因子使得gcd(a,b)=ax+by成立
return x, y, gcd
num1=
num2=
tt=ext_gcd(num1,num2)
print(tt)
m | a ->a ≡ 0 mod m
费马小定理
如果p是一个质数,而整数a不是p的倍数,则有
a
(
p
−
1
)
≡
1
(
m
o
d
p
)
a
p
≡
p
(
m
o
d
p
)
a^{(p-1)}≡1\pmod p\\ a^{p}≡p\pmod p
a(p−1)≡1(modp)ap≡p(modp)
乘法逆元
方法一:
费马小定理
拓展欧几里得算法
二次剩余
p = 1 mod 4
p = 3 mod 4
rabin
Legendre Symbol
勒让德符
sage:
kronecker
Tonelli-Shanks算法
Tonelli-Shanks算法_python_M3ng@L的博客-优快云博客
中国剩余定理
在密码学中,我们通常使用中国余数定理来帮助我们将非常大的整数问题简化为一组几个更容易的问题。
x ≡ a mod N
N = n1 * n2 * ... * nn