Das Autoquadratzahlenproblem oder auch die Autoquadzahlen |
![]() |
![]() |
Letztmalig dran rumgefummelt: 15.05.23 01:21:13 |
![]() |
Finde alle natürlichen Zahlen mit der Eigenschaft, dass sie auf ihre Quadratwurzel enden. Beispiel: Wegen Quadratwurzel 5776 = 76 ist 5776 eine der gesuchten Zahlen. Wir verschaffen uns - mittels Papier und Bleistift, Taschenrechner usw. - einige einfache Spezialfälle (Beispiele): Für die Zahlen n von 0 bis 9 lauten die Paare (n, n²) wie folgt: (0, 0), (1, 1). (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81). Die Zahlen 0, 1, 5 und 6 sind also Autoquadzahlen. Damit haben wir bereits vier Lösungen gefunden. lm Bereich 10 <= n < 99 erhalten wir die Paare (25, 625) und (76, 5776). | |||||||
![]() |
1. Problembeschreibung 2. Hintergründe und Zusammenhänge - Einordnung in Klassen 3. Lösungsalgorithmen 4. Programmvorschläge 5. Zusammenfassung 6. Weiterführende Literatur 7. Linkliste zum Thema 8. Verwandte Themen |
|||||||
![]() |
|
|||||||
![]() |
Quellen: LOG IN - Heft 146/147 (2007) Seite 48 ff. |
1. Problembeschreibung |
![]() |
![]() |
![]() |
![]() |
Finde alle natürlichen Zahlen n mit der Eigenschaft, dass ihr Quadrat n2 auf n endet. | ||||||||||||||||||||||||||||||||||
![]() |
die ersten 16 Autoquadzahlen |
||||||||||||||||||||||||||||||||||
![]() |
die ersten 10 Fünfer-Autoquadzahlen |
2. Hintergründe, Zusammenhänge - Einordnung in Klassen |
![]() |
![]() |
![]() |
![]() |
Für kleine Mengen M ist das Problem empirisch durch ausprobieren möglich! Für große Mengen existieren allerdings keine anderen Verfahren, als genau diese: ausprobieren jeden Elements mit jedem - das sind dann aber schon bei 10 Elementen 210 Möglichkeiten. |
![]() |
Programm für weitere Spezialfälle Wir wollen nun ein Programm schreiben, das alle dreistelligen Autoquadzahlen ermittelt. Hier stellt sich die Frage, wie man die letzten drei Ziffern einer Zahl herausgreift. Aus dem Mathematikunterricht wissen wir. dass sich die letzten n Ziffern als Rest bei Division durch 10° gewinnen lassen. Damit können wir ein erstes JAVA-Programm aufschreiben: public class Autoquad |
![]() |
Programm-Modifikation für noch mehr einfache Fälle Um auch die ein- und die zweistelligen Zahlen zu untersuchen, ändern wir in obigem Programm die Zählschleife zum einen so, dass sie von 1 bis 9, und zum anderen so, dass sie von 10 bis 99 läuft. Im ersten Fall rechnen wir modulo 10, im zweiten modulo 100. Damit erhalten wir die Zahlenpaare (1, 1), (5, 25), (6, 36). (25. 625) und (76, 5776). Nun kennen wir also - außer dem trivialen Fall 0 - die ersten sieben Autoquadzahlen, nämlich 1, 5, 6, 25, 76, 376 und 625. |
![]() |
Verallgemeinerung zum Erfassen aller bisherigen Lösungen Wir entwickeln nun ein Programm, das die verschiedenen Bereiche 1..9,
10..99, 100..999 usw. der Reihe nach durchläuft. Diesem Zweck dient eine
äußere Schleife, welche die genannten Potenzen von 10 erzeugt. Das folgende
Programm liefert Bild 4, also zusätzlich die B. bis 16. Autoquadzahl. |
![]() |
Hier stoßen wir nun an die Grenze des Rechnens mit „langen" ganzen
Zahlen (Datentyp long). Sie lässt sich durch Übergang zu Zahlen vom Typ
Biglnter überwinden. Doch wird nun die (Länge der) Rechenzeit zum Problem.
Damit ist der Augenblick gekommen, unser Denkvermögen einzusetzen, d. h. die
Aufmerksamkeit weg vom Programmieren auf die Entwicklung eines etwas
intelligenteren Algorithmus zu richten. Bisher sind wir ja mit
„Brachialgewalt" vorgegangen, indem wir jede einzelne Zahl darauf prüften,
ob sie autoquadratisch sei: Die Anzahl der zu prüfenden Zahlen und damit
auch die Rechenzeit stieg mit jeder zusätzlichen Stelle auf das Zehnfache. Wir halten fest: Ein Programm, bei dem die Rechenzeit mit der Problemgröße exponentiell wächst, ist für die Praxis wertlos. 6. Verbesserung des
Algorithmus durch mathematische Analyse |
3. Lösungsalgorithmus |
![]() |
![]() |
![]() |
![]() |
Nimm die vorgegebene Zahl - fülle sie auf vier Stellen auf. Ergibt sich Gleichheit in allen vier möglichen Stellen, so verabschieden wir uns von der Zahl - sie ist keine Zahl innerhalb des Definitionsbereiches - was wir selbstverständlich softwartechnisch exakt wegfangen, wobei wir Oma und/oder Katze nutzen! Wir erhalten in jedem Fall der verbleibenden Restmenge vier Stellen (ungleich in mindest einer Position) und bilden daraus die jeweils kleinste und größte ziffernfolge als Zahl. Von der jeweils größeren subtrahieren wir die jeweils kleinere und verfahren damit, bis wir entweder 6174 oder eine Tiefe von 7 erreicht haben (was im Worst-Case gleichzeitig eintritt). |
![]() |
4. Programmvorschläge |
![]() |
![]() |
![]() |
![]() |
Hannes Uhlig hat unser Vorschläge konsequent aufgegriffen und einschließlich der Problematik Oma und Katze ein Programm des Kaprekar-Algorithmus notiert, in welchem schon einige Kerngedanken eines sauberen - eben noch nicht objektorientierten Programmieirstils zusammenlaufen. |
![]() |
|
![]() |
5. Zusammenfassung |
![]() |
![]() |
![]() |
![]() |
|
![]() |
6. Weiterführende Literatur |
![]() |
![]() |
![]() |
![]() |
|
![]() |
7. Links zum Thema |
![]() |
![]() |
![]() |
![]() |
|
![]() |
http://www.mathematische-basteleien.de/kaprekarzahl.htm |
8. Verwandte Themen |
![]() |
![]() |
![]() |
![]() |
Das Vorangestellte hilft wirtschaften, löst jedoch kein einziges Problem (allerdings ohne Beachtung der Worst-Case-Strategien wird man auch nicht erfolgreich Software entwickeln und/oder informatische Projekte realisieren können). Deshalb nunmehr das, was wirklich Arbeiten hilft. | ||||||||||||||||||||||||
![]() |
|
||||||||||||||||||||||||
![]() |
|
||||||||||||||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Ros am 24. Dezember 2007 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |
Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-) |