Das Autoquadratzahlenproblem oder auch die Autoquadzahlen |
![]() |
![]() |
Letztmalig dran rumgefummelt: 11.06.08 19:34:39 |
![]() |
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 Autoquadratzahlen. 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 Informationen 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. Dummerweise werden zumindest die zutreffenden Quadrate sehr schnell so groß, dass diese mühelos das darstellbare Datentypenspektrum zumindest im ganzzahligen Bereich überschreiten. | ||||||||||||||||||||||||||||||||||
![]() |
die ersten 16 Autoquadzahlen |
||||||||||||||||||||||||||||||||||
![]() |
die ersten 10 Fünfer-Autoquadzahlen |
||||||||||||||||||||||||||||||||||
![]() |
1 1 5 25 6 36 25 625 76 5776 376 141376 625 390625 9376 87909376 90625 8212890625 109376 11963109376 890625 793212890625 2890625 8355712890625 7109376 50543227109376 12890625 166168212890625 87109376 7588043387109376 212890625 45322418212890625 787109376 619541169787109376 1787109376 3193759921787109376 8212890625 67451572418212890625 18212890625 331709384918212890625 81787109376 6689131260081787109376 918212890625 843114912509918212890625 9918212890625 98370946943759918212890625 59918212890625 3590192236006259918212890625 259918212890625 67557477392256259918212890625
hat Eric Kreller mit seinem Programm berechnet ;-) |
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
64lnt ü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 |
![]() |
![]() |
![]() |
![]() |
Wie oben beschrieben kann ich zwei Instanzen von wohlgemerkt korrekten Lösungen verfolgen: ich nehme die Billigvariante und berechne von einer jeden Zahl deren Quadrat. Dieses zerlege ich aus einem String in seine Character und vergleiche von rechts beginnend mit der Basiszahl - stimmt dieser String wieder überein, so habe ich eine Autoquadratzahl ermittelt. Intelligenter benutze ich dazu allerdings bereits als richtig erkannte Muster und verwende nur Basiszahlen, welche auf "5" oder "6" enden. Das allerdings ist risikobehaftet, denn nu bleiben mit Sicherheit 'ne Menge Zahlen außen vor. Wer garantiert, dass es trotz aller Wahrscheinlichkeiten in den großen Basen nicht doch noch mindestens eine zahl gibt, welche von dieser Konstellation abweicht? |
![]() |
4. Programmvorschläge |
![]() |
![]() |
![]() |
![]() |
Es gab einiges an Ideen - schlussendlich habe ich mich für André Neuberts Programmversion entschieden, wenngleich die Zahlen nicht besonders groß sind. Bei Erics Programmierung mit Dot.Net geht das dann auch mit wesentlich größeren Zahlen. | ||||||
![]() |
|
||||||
![]() |
|
5. Zusammenfassung |
![]() |
![]() |
![]() |
![]() |
|
![]() |
6. Weiterführende Informationen |
![]() |
![]() |
![]() |
![]() |
War 'ne tolle Sache
(zumindest für mich als Lehrer), einmal ein Schuljahr lang mit Schülern über
doch die Grenzen von Programmiersprachen tangierende Probleme zu
diskutieren, diese auszuloten, Algorithmen zu finden und wieder wegzuwerfen.
Dümmer geworden ist dabei wahrscheinlich keine der betroffenen Seiten, die
Schüler werden's teilweise einige Monate später an Universitäten bemerken
;-) Alles war im Rahmen des Möglichen: es anstrengend (was es ja sein soll), aber machbar - unten kann man einige Ergebnisse einsehen. Alles, was präsentiert wird, ist Wissensstand Juni 2008 ;-) |
||||||||||||
![]() |
|
||||||||||||
![]() |
|
||||||||||||
![]() |
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 ;-) |