Vollkommene/Perfekte Zahl in einem Bereich herausfinden?

Zellner82  16.04.2021, 15:07

Vollkommene Zahl = ganze Zahl?

Leonardo06 
Beitragsersteller
 16.04.2021, 15:07

Nein.

3 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.


Leonardo06 
Beitragsersteller
 16.04.2021, 16:47

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

0
offeltoffel  19.04.2021, 06:56
@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
Leonardo06 
Beitragsersteller
 20.04.2021, 13:08
@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
offeltoffel  21.04.2021, 12:24
@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

Da vollkommene Zahlen sehr selten sind, ist die einfachste Lösung mit einer Liste aller bekannten v.Z. zu vergleichen:

  • 6
  • 28
  • 496
  • 8.128
  • 33.550.336
  • 8.589.869.056
  • 137.438.691.328
  • 2.305.843.008.139.952.128

Damit verlässt du dann schon den Zahlenbereich von long in Java. Insgesamt sind 51 vollkommene Zahlen bekannt

Vermutlich ist das aber nicht die Lösung, die der Aufgabensteller gerne gehabt hätte ;-) Und nach 7 Monaten hat sich diese Antwort vermutlich sowieso erledigt.

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?


Leonardo06 
Beitragsersteller
 16.04.2021, 15:09

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

0