def inv(p,m): # return 1/p mod m , that is, return (a,b) s.t pa+bm = 1 (and get a) if p>m: b,a=inv(m,p) return (a,b) if p==1: return (1,0) # m=cp+r # pa+b(cp+r)=1 <=> (a+bc)p + br = 1 c=m/p r=m%p b,a_bc=inv(r,p) return (a_bc-b*c, b) def gcd(a,b): if b