Erweiterter euklidischer Algorithmus
Verfasst: Mittwoch 29. April 2009, 11:28
Hi
Ich schreibe grade eine Facharbeit in Mathe und hab mir jetzt das Programmieren über Internet selbst beigebracht da ich vorher noch nie Informatik hatte... ich hab da ein kleines Problem mit dem erweiterten euklidischen Algorithmus und zwar weiß ich nicht wie ich dem Programm sagen soll, dass er für bestimmte Zahlen wiederholt die vorherigen Gleichungen einsetzen soll...
ich wollte auch gerne, dass er das Rechnen nicht einfach im Hintergrund macht sondern die Rechenschritte zeigt daher habe ich das erst mal so angefangen:
a = 481
b = 253
aList = [a, b, a%b]
modulList = []
vielfachList = []
restList = []
multiList = []
while aList[2] > 0:
print (aList[0], "=", aList[0]//aList[1], "*", aList[1], "+", aList[2])
modulList.append(aList[0])
vielfachList.append(aList[1])
multiList.append(aList[0]//aList[1])
restList.append(aList[2])
aList[0] = aList[1]
aList[1] = aList[2]
aList[2] = aList[0] % aList[1]
if aList[0] < aList[1]:
print (aList[1], "=", aList[1]//aList[0], "*", aList[0], "+", aList[1] % aList[0])
if aList[1] % aList[0] == 0:
break
print ("--------------------------------------------------------------------")
i = 1
copyRestList = []
while len(copyRestList) <= len(restList):
copyRestList.append(restList[len(restList)-i])
i = i + 1
if len(copyRestList) == len(restList):
break
restList = copyRestList
i = 1
copyModulList = []
while len(copyModulList) <= len(modulList):
copyModulList.append(modulList[len(modulList)-i])
i = i + 1
if len(copyModulList) == len(modulList):
break
modulList = copyModulList
i = 1
copyMultiList = []
while len(copyMultiList) <= len(multiList):
copyMultiList.append(multiList[len(multiList)-i])
i = i + 1
if len(copyMultiList) == len(multiList):
break
multiList = copyMultiList
i = 1
copyVielfachList = []
while len(copyVielfachList) <= len(vielfachList):
copyVielfachList.append(vielfachList[len(vielfachList)-i])
i = i + 1
if len(copyVielfachList) == len(vielfachList):
break
vielfachList = copyVielfachList
i = 0
while len(restList) > i:
print (restList, "=", modulList, "-", multiList, "*", vielfachList)
i = i + 1
print ("--------------------------------------------------------------------")
er rechnet jetzt halt erst einmal den ggT aus, was in diesem Fall die 1 ist, und dann formt er im nächsten Schritt alle Gleichungen zu dem Rest um... das sieht dann so aus:
481 = 1 * 253 + 228
253 = 1 * 228 + 25
228 = 9 * 25 + 3
25 = 8 * 3 + 1
--------------------------------------------------------------------
1 = 25 - 8 * 3
3 = 228 - 9 * 25
25 = 253 - 1 * 228
228 = 481 - 1 * 253
----------------------------------------------------------------
jetzt müsste er nur von der Gleichung 1= ausgehen und z.B. die 25 mit dem Term 253-1*228 ersetzen, wie auch die 8*3 mit 8*(228-9*25)...
im Endeffekt sollte das dann so in etwa aussehen:
1=25-8*3=(253-1*228)-8*(228-9*25)
=253-9*(481-1*253)+72*(253-1*228)
=82*253-9*481-72*(481-1*253)
=154*253-81*481
Kann mir da bitte jemand helfen??? Ich komm hier einfach nicht mehr weiter
Danke schon mal im Voraus
Ich schreibe grade eine Facharbeit in Mathe und hab mir jetzt das Programmieren über Internet selbst beigebracht da ich vorher noch nie Informatik hatte... ich hab da ein kleines Problem mit dem erweiterten euklidischen Algorithmus und zwar weiß ich nicht wie ich dem Programm sagen soll, dass er für bestimmte Zahlen wiederholt die vorherigen Gleichungen einsetzen soll...
ich wollte auch gerne, dass er das Rechnen nicht einfach im Hintergrund macht sondern die Rechenschritte zeigt daher habe ich das erst mal so angefangen:
a = 481
b = 253
aList = [a, b, a%b]
modulList = []
vielfachList = []
restList = []
multiList = []
while aList[2] > 0:
print (aList[0], "=", aList[0]//aList[1], "*", aList[1], "+", aList[2])
modulList.append(aList[0])
vielfachList.append(aList[1])
multiList.append(aList[0]//aList[1])
restList.append(aList[2])
aList[0] = aList[1]
aList[1] = aList[2]
aList[2] = aList[0] % aList[1]
if aList[0] < aList[1]:
print (aList[1], "=", aList[1]//aList[0], "*", aList[0], "+", aList[1] % aList[0])
if aList[1] % aList[0] == 0:
break
print ("--------------------------------------------------------------------")
i = 1
copyRestList = []
while len(copyRestList) <= len(restList):
copyRestList.append(restList[len(restList)-i])
i = i + 1
if len(copyRestList) == len(restList):
break
restList = copyRestList
i = 1
copyModulList = []
while len(copyModulList) <= len(modulList):
copyModulList.append(modulList[len(modulList)-i])
i = i + 1
if len(copyModulList) == len(modulList):
break
modulList = copyModulList
i = 1
copyMultiList = []
while len(copyMultiList) <= len(multiList):
copyMultiList.append(multiList[len(multiList)-i])
i = i + 1
if len(copyMultiList) == len(multiList):
break
multiList = copyMultiList
i = 1
copyVielfachList = []
while len(copyVielfachList) <= len(vielfachList):
copyVielfachList.append(vielfachList[len(vielfachList)-i])
i = i + 1
if len(copyVielfachList) == len(vielfachList):
break
vielfachList = copyVielfachList
i = 0
while len(restList) > i:
print (restList, "=", modulList, "-", multiList, "*", vielfachList)
i = i + 1
print ("--------------------------------------------------------------------")
er rechnet jetzt halt erst einmal den ggT aus, was in diesem Fall die 1 ist, und dann formt er im nächsten Schritt alle Gleichungen zu dem Rest um... das sieht dann so aus:
481 = 1 * 253 + 228
253 = 1 * 228 + 25
228 = 9 * 25 + 3
25 = 8 * 3 + 1
--------------------------------------------------------------------
1 = 25 - 8 * 3
3 = 228 - 9 * 25
25 = 253 - 1 * 228
228 = 481 - 1 * 253
----------------------------------------------------------------
jetzt müsste er nur von der Gleichung 1= ausgehen und z.B. die 25 mit dem Term 253-1*228 ersetzen, wie auch die 8*3 mit 8*(228-9*25)...
im Endeffekt sollte das dann so in etwa aussehen:
1=25-8*3=(253-1*228)-8*(228-9*25)
=253-9*(481-1*253)+72*(253-1*228)
=82*253-9*481-72*(481-1*253)
=154*253-81*481
Kann mir da bitte jemand helfen??? Ich komm hier einfach nicht mehr weiter
Danke schon mal im Voraus
