Fragen zur Aufgabenstellung einsehen

2 Lösungen Lösungen noch nicht öffentlich
Gesellige Zahlen finden
Fortgeschrittener - Python von eulerscheZhl - 13.02.2015 um 19:56 Uhr
Eine Zahl ist dann vollkommen, wenn sie gleich der Summe ihrer Teiler ist. (Bsp.: die Teiler von 6 sind 1,2,3 und 1+2+3=6)
Es gibt aber auch Zahlenpaare, die jeweils die andere Zahl als Teilersumme besitzen (Bsp.: 220 und 284), befreundete Zahlen.
Dies lässt sich mit den geselligen Zahlen sogar noch steigern: hier ergibt nicht die Teilersumme von zwei Zahlen die jeweils andere, sondern es lässt sich eine Kette aus mehreren Zahlen bilden (Bsp.: 12496, 14288, 15472, 14536, 14264)

Finde alle Gruppen von geselligen Zahlen, bei denen keine eine Obergrenze (z.B. 10^7) übersteigt.

Veigar

Punkte: 1120

61 Aufgaben
9 Lösungen
12 Kommentare

#1
16.12.2015 um 19:21 Uhr
Interessante Aufgabe!

Ich habe eine Lösung ausgearbeitet, diese ist aber leider nicht in der Lage sich bis in den Bereich von 10**7 zu bewegen da sie ja für für jede Zahl in der Kette die Summe all ihrer Teiler berechnet und dann mit dieser, sofern sie kleiner als die Oberschranke ist wieder genau so verfährt so das bei ungünstigen Zahlen sehr lange Ketten entstehen können die der Rechner in der Hoffnung irgendwann wieder auf die Ursprungszahl zu kommen weiter verarbeitet. Ist das konzeptionell richtig und mein PC ist einfach inzwischen zu mittelalt, oder gibt es eine Maximallänge die die Kette nicht überschreiten darf und die in der Aufgabenstellung vergessen wurde? :)

Schöne Grüße!
post_arrow
232 0

Veigar

Punkte: 1120

61 Aufgaben
9 Lösungen
12 Kommentare

#2
15.02.2016 um 00:35 Uhr
Ich habe jetzt meine Lösung eingereicht. Allerdings ist diese bei weitem nicht in der Lage sich im Zahlenbereich von 10**7 zu bewegen obwohl ich die Summe-Teiler-Berechnung schon optimiert habe und nun für jede Zahl nicht die Anzahl der Zahl selbst sondern nur 2*wurzel(Zahl) viele Zahlen auf ihre Teilbarkeit überprüft werden. Auch lasse ich jede Zahl nur ein mal überprüfen! :/ Wenn irgendjemand superschlaue Optimierungsmethoden sieht wäre ich voll dankbar...

Ahoi!
post_arrow
267 0

eulerscheZhl

Punkte: 5230

110 Aufgaben
76 Lösungen
64 Kommentare

#3
19.02.2016 um 08:54 Uhr
Entschuldigung für die späte Antwort. Ich habe erst eine Benachrichtigungsmail bekommen, als du die Lösung abgeschickt hast.

Als ich die Grenze von 10^7 festgelegt habe, habe ich an compilierte Sprachen gedacht. Ich habe meine Lösung jetzt in python übertragen, dort dauert es knapp 2 Minuten (zum Vergleich: <7s in C#).
post_arrow
269 0
Bitte melden Sie sich an um zu antworten.
Antworten