Manchmal ist es sinnvoll alle Teiler einer Zahl zu ermitteln, etwa um sich
an dieser Aufgabe zu versuchen. Ein ganz erster Versuch, eine Funktion zu schreiben,
die alle Teiler einer Zahl liefert, ist:
def teiler_ermitteln(zahl):
''' Soll alle Teiler einer ganzen Zahl ermitteln
und als Liste zurueckgeben.
'''
liste = []
liste.extend([1,zahl])
ende = zahl
i = 1
while i < ende:
i += 1
if i == ende:
break
if (zahl / i) % 1 == 0.0:
liste.append(i)
if int(zahl/i) != i:
liste.append(int(zahl/i))
ende = int(zahl/i)
return liste
ergebnis = teiler_ermitteln(72)
ergebnis.sort()
print(ergebnis)
Das Skript arbeitet so nur für natürliche Zahlen größer 0. Da aber
gilt, so gilt auch und . Man kann sich also bei der Untersuchung des Teilbarkeitsbegriffs auf natürliche Zahlen beschränken.
Um
die Programmieraufgabe allerdings zu lösen, reicht diese Version vollkommen aus:
def teiler_ermitteln(zahl):
''' Soll alle Teiler einer ganzen Zahl ermitteln
und als Liste zurueckgeben.
'''
liste = []
liste.extend([1,zahl])
ende = zahl
i = 1
while i < ende:
i += 1
if i == ende:
break
if (zahl / i) % 1 == 0.0:
liste.append(i)
if int(zahl/i) != i:
liste.append(int(zahl/i))
ende = int(zahl/i)
liste.sort()
return liste
for i in range(1,10000):
teiler = teiler_ermitteln(i)
teiler.pop()
summe = sum(teiler)
if summe > i and i % 2 != 0:
print("{} ist abundant.".format(i))
elif summe == i:
print("{} ist vollkommen.".format(i))
Ich denke allerdings, dass in der eigentlichen Funktion noch deutliches Optimierungspotential steckt.