Wenn die ganzen Zahlen $ a, b (a> b) $ gegeben sind, wird $ a $ durch $ b $ geteilt und der Rest ist $ r $. Unter Verwendung der Tatsache, dass die maximalen Versprechen von $ a $ und $ b $ und die maximalen Versprechen von $ b $ und $ r $ gleich sind (das Prinzip der Teilung), können die maximalen Versprechen von $ a und b $ durch Wiederholen der Teilung berechnet werden. Wie finde ich es?
Geben Sie Ganzzahlen $ a, b $ ein Maximale Verpflichtung ausgeben $ d $
euclid.py
def euclid(a,b):
a_list = []
if a < b:
a_list.append(b)
a_list.append(a)
if a >= b:
a_list.append(a)
a_list.append(b)
i = 0
while(a_list[-1]!=0):
a_list.append(a_list[i]%a_list[i+1])
i +=1
return a_list[-2]
Ein Verfahren zum Finden einer Lösung einer linearen unbestimmten Gleichung unter Verwendung des folgenden Mechanismus. Wenn Sie $ ax + by = d $ finden, setzen Sie $ a_0 = a, a_1 = b $.
Geben Sie Ganzzahlen $ a, b $ ein Ausgabe: Ganzzahlen $ x, y $ mit maximalen Verpflichtungen $ d $ und $ ax + by = d $
exEuclid.py
def exEuclid(a,b):
a_list = []
if a < b:
a_list.append(b)
a_list.append(a)
if a >= b:
a_list.append(a)
a_list.append(b)
q = []
x = []
x.append(1)
x.append(0)
y = []
y.append(0)
y.append(1)
i = 0
while(a_list[-1]!=0):
a_list.append(a_list[i]%a_list[i+1])
q.append(a_list[i]//a_list[i+1])
x.append(x[-2]-q[-1]*x[-1])
y.append(y[-2]-q[-1]*y[-1])
i +=1
return x[-2],y[-2],a_list[-2]
Recommended Posts