Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1617:vollkommene_zahlen_soenke_roos
Vollkommene Zahlen

von Sönke

Der folgende Bericht dokumentiert meine Arbeit an einem Programm, das um die Eingabe eines Zahlenbereichs bittet und alle „Vollkommenen Zahlen“ in diesem Bereich ausgibt, also all jene Zahlen, deren Teiler zusammengerechnet die Zahl ergeben; beispielsweise 6 (Teiler sind 1, 2, 3; Summe entspricht der Zahl), wohingegen die 8 (Teiler sind 1, 2, 4; Summe ist 7) keine vollkommene Zahl ist.

Ich begann mit dem Ansatz einer while-Schleife, in der eine feste Zahl (hier 10) durch alle kleineren Zahlen bis 0 geteilt wird und alle Teiler, bei deren Division mit der Zahl kein Rest entsteht ausgeben lassen.

zahl = 0
x = 10
 
while zahl < x:
    zahl += 1
    if x % zahl == 0:
        print zahl

Ausgabe:

1
2
5
10
>>>

Gemäß der Definition Vollkommener Zahlen muss die Summe aller Teiler KLEINER als die Zahl die Zahl ergeben, also muss der Code wie folgt geändert werden:

zahl = 0
x = 10
 
while zahl < x - 1:
    zahl += 1
    if x % zahl == 0:
        print zahl
 

Ausgabe:

1
2
5
>>>

Alle betreffenden Teiler werden im folgenden Schritt in eine Liste eingehängt:

liste = []
    while x < zahl - 1:
        x += 1
        if zahl % x == 0:
            liste.append(x)
        else:
            continue

In der Liste befinden sich also nun alle Teiler, bei denen der Mudolo-Operator mit der Zahl 0 ergibt. Wenn die Summe aller sich in der Liste befindlichen Teiler der Zahl entspricht, handelt es sich um eine vollkommene Zahl, die in folgendem if-Befehl ausgegeben wird:

if sum(liste) == zahl:
        print zahl

Bisher funktionierte das Programm nur bei festen Zahlen, die man explizit im Code hat ändern müssen. Um alle vollkommenen Zahlen innerhalb eines Zahlenbereiches auszugeben, muss der gesamte Code in eine weitere while-Schleife eingebettet werden:

zahl = 1
x = 0
eingabe = int(raw_input("Bitte Bereich eingeben: "))
print "Alle vollkommenen Zahlen lauten: "
 
 
 
while zahl < eingabe:
    liste = []
    while x < zahl - 1:
        x += 1
        if zahl % x == 0:
            liste.append(x)
        else:
            continue
 
 
 
    if sum(liste) == zahl:
        print zahl
    x = 0
    zahl += 1   
 

Nun wird das Programm so oft ausgeführt, wie zahl ungleich eingabe, also dem Zahlenbereich, ist. zahl wird mit jedem Schleifendurchlauf plus 1 gerechnet.

Auf diese Weise wird die Prüfung, ob es sich um eine vollkommene Zahl handelt auf alle Zahlen bis zum eingegebenen Zahlenbereich (eingabe) angewendet.

Dieser letztgenannte Code ist der endgültige.

ws1617/vollkommene_zahlen_soenke_roos.txt · Zuletzt geändert: 2016/11/11 21:17 von SoenkeRoos96