Hai chức năng này thực hiện thuật toán Euclide mở rộng, và sau đó tìm nghịch đảo nhân. Đơn hàng có vẻ đúng, nhưng nó không quay trở lại với những gì tôi mong đợi theo công cụ này từ U của Sydney http://magma.maths.usyd.edu.au/calc/ và vì điều này được thực hiện trong lĩnh vực hữu hạn GF (2), tôi nghĩ rằng tôi đang thiếu một số bước quan trọng mà dịch từ cơ số 10 vào trường này.Python nghịch đảo nhân trong GF (2) lĩnh vực hữu hạn
Điều này đã được thử nghiệm và làm việc trên cơ sở 10, nhưng việc sử dụng đa thức với hệ số nhị phân có thể không thực hiện được ở đây. Vì vậy, câu hỏi của tôi là những gì của Python tôi không chính xác áp dụng cho thuật toán này, chẳng hạn như // sàn, có thể không thực hiện từ những gì các chức năng có khả năng trong cơ sở 10 để có thể làm điều này trong GF (2).
Công cụ trên có thể được thử nghiệm như thế này:
R<x>:=PolynomialRing(GF(2));
p:=x^13+x+1; q:=x^12+x;
g,r,s:=XGCD(p,q);
g eq r*p+s*q;
g,r,s;
Các chức năng:
def extendedEuclideanGF2(self,a,b): # extended euclidean. a,b are values 10110011... in integer form
inita,initb=a,b; x,prevx=0,1; y,prevy = 1,0
while b != 0:
q = int("{0:b}".format(a//b),2)
a,b = b,int("{0:b}".format(a%b),2);
x,prevx = (int("{0:b}".format(prevx-q*x)), int("{0:b}".format(x,2))); y,prevy=(prevy-q*y, y)
print("Euclidean %d * %d + %d * %d = %d" % (inita,prevx,initb,prevy,a))
return a,prevx,prevy # returns gcd of (a,b), and factors s and t
def modular_inverse(self,a,mod): # a,mod are integer values of 101010111... form
a,mod = prepBinary(a,mod)
bitsa = int("{0:b}".format(a),2); bitsb = int("{0:b}".format(mod),2)
#return bitsa,bitsb,type(bitsa),type(bitsb),a,mod,type(a),type(mod)
gcd,s,t = extendedEuclideanGF2(a,mod); s = int("{0:b}".format(s))
initmi = s%mod; mi = int("{0:b}".format(initmi))
print ("M Inverse %d * %d mod %d = 1"%(a,initmi,mod))
if gcd !=1: return mi,False
return mi # returns modular inverse of a,mod
tôi đã thử nghiệm với đa thức như thế này nhưng ở dạng nhị phân của khóa học:
p = "x**13 + x**1 + x**0"
q = "x**12 + x**1"
bạn cũng có thể hiển thị một số định nghĩa cho các chức năng của mình, ví dụ: prepBinary? –