defrev_gcd(a,b):#计算逆元
an,N = [],a
while1:
divisior = a//b
a,b = b,a%b
if b==0:break
an.append(divisior)
b1,b2 = 1,0for ai in an[::-1]:b1,b2 = b1*ai+b2,b1
if len(an)%2 ==0:return b1
else:return N-b1
defcreate(p,q):
n = p*q
e = (p>>1)+(q>>1)
x = (p-1)*(q-1)
d = rev_gcd(x,e)
return n,d,e
defrsa_endecode(c,e,n):#快速求余算法
u = 1;
while e:
if e&1:u = (u*c)%n
c = (c**2)%n
e >>=1return u
n,d,e = create(104729,15485863)
c = rsa_endecode(310,e,n)
print(c,rsa_endecode(c,d,n))