欧几里得算法
在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。可用来求解最大公因子。
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
拓展欧几里得算法
扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数 a,b,扩展欧几里得算法可以在求得a,b的最大公约数的同时,能找到整数 x,y(其中一个很可能是负数),使它们满足裴蜀定理。
###两数的最大公约数可以用两数的整数倍相加来表示,如 21=5×105+(−2)×252。这个重要的结论叫做裴蜀定理。
扩展欧几里得算法可以用来计算模反元素(也叫模逆元),求出模反元素是RSA加密算法中获得所需公钥、私钥的必要步骤。
def ext_euclid(a, b):
if b == 0:
return 1, 0, a
else:
x, y, q = ext_euclid(b, a % b)
x, y = y, (x - (a // b) * y)
return x, y, q
欧拉定理
在数论中,欧拉定理(也称费马-欧拉定理或欧拉φ函数定理)是一个关于同余的性质。欧拉定理表明,若 n,a 为正整数,且 n,a 互素(即 gcd(a,n)=1),则
a^φ(n)≡1(modn)a
即a^φ*(n) 与 1 在模 n 下同余;φ(n) 为欧拉函数。
费马小定理
假如 a是一个整数,p 是一个质数,那么 a**p−a 是 p的倍数,可以表示为:
a**p≡a(modp)
如果 a 不是 p的倍数,这个定理也可以写成:
a**p−1≡1(modp)
中国剩余定理
在某个范围内的整数可以通过它的一组余数来重构,这组余数是对该整数用一组两两互素的整数取模得到的。
m1=9999898189399710944945175986823699283832634897494811055017931879616685144311436341141766099859326491065848501817142982115771185162997612803117820866651883382451513640992216907651771058051279925943601710718126059368777767096972438472819231427588118556408636136647349913994492726385929483133454782840019414591166043367498351993249753290335295216950119382805885184737511126220686143514761883601207330979621535628586580757368685651088031119467755108590600710850854943670894950779616672270483495059434436010422630145857876354584079848132716930802222032799341529087951644722536001457315831991495602099549789150689752785330
e=1
p=92538061474659434965766707753277647750180905432845534846356528435936888965333226086169904199216215012947710342029002352699085497779485513265351362190598215667657068095618938664837728725648238192919243857683159177678796025508014102729441580525715172436030848188211203036449922481835510023841607043174449794711
q=117331230550909514799361062606577016755769121960239167044709674015606795789348431779715915970888483061434401976415839145435489378040433586586313563656672262745584538867388708562351187045836241162247167973577347869287649039872388811916703606392337210457165669442472123212904588128388579564638536535498924591197
c1=pow(m1,e,p)
c2=pow(m1,e,q)
print(c1)
print(c2)