Vollkommene/Perfekte Zahl in einem Bereich herausfinden?

Vollkommene Zahl = ganze Zahl?

Nein.

2 Antworten

Von Experte Leonardo06 bestätigt

Bei Wikipedia finde ich folgende mathematische Definition, die wesentlich simpler zum Umsetzen ist als dein Ansatz:

(1) 2^(k-1) * (2^k - 1)

allerdings darfst du für k nicht jede beliebige Zahl einsetzen, sondern die sog. Mersenne-Primzahlen. Das sind Zahlen, für die gilt:

(2)  Mk = 2^k - 1

Vorgehen könnte sein:

Du lässt Formel (2) k von 0 ... 100.000.000 laufen und prüfst jeweils, ob Mk eine Primzahl ist. Falls ja, kommt k in eine Liste. Danach lässt du Formel (1) mit allen k in der Liste laufen und erhältst dabei die geforderten Vollkommenen Zahlen.

Also der Vorschlag ist gut, aber leider dauert es bis k = 100 schon Minuten...

0
@Leonardo06

Das wundert mich nicht. Ich glaube mein 100.000.000 war etwas zu hoch gegriffen. Mit k = 89 erhältst du die größte Mersenne-Primzahl unter 100 und wenn du die einsetzt, kommt die Vollkommene Zahl 191.561.942.608.236.107.294.793.378.084.303.638.130.997.321.548.169.216 raus.

1
@offeltoffel

Ich habe einfach nach den Primzahlen geguckt. Ich musste nur bis 12xx gehen, weil ab da an ein Overflow kam. Trotzdem danke, das hat mir sehr geholfen.

1
@Leonardo06

Ich bin mir trotzdem nicht sicher, ob ihr die Aufgabe nicht eher per Logik lösen müsstet, also ähnlich wie du es vorgeschlagen hattest. So eine algebraische Umsetzung ist mathematisch anspruchsvoller, aber programmiertechnisch super easy.

1

Es wäre hilfreich, inwiefern es "falsch" ist. Kommt ein Fehler? Funktionieren nur die ersten Werte? Ist es ein mathematisches Problem oder kommst du bei Python nicht weiter?

Es ist ein mathematisches Problem und bei mir kommen nur falsche Lösungen raus.

0

Was möchtest Du wissen?