Faktorisieren von natürlichen Zahlen

Werbung
GK Informatik 12
Arbeitsblatt 06
22.02.2007
Faktorisieren von natürlichen Zahlen
Rückblick auf das Arbeitsblatt 05:
In der Aufgabe 1 des letzten Arbeitsblatts wurde festgestellt, dass sich die Zeitdauer für das
Faktorisieren einer natürlichen Zahl ungefähr verdoppelt, wenn sich die Zahl um vier Stellen
verlängert. Für das Faktorisieren einer 48-stelligen Dezimalzahl benötigt ein PC im ComputerLabor ungefähr 40 Sekunden, für das Faktorisieren einer 1-stelligen Dezimalzahl ungefähr 0,016
Sekunden. Mit diesen Werten können Abschätzungen für die Zeitdauer des Faktorisierens einer nstelligen Dezimalzahl getroffen werden, z.B.:
•
n = 310:
310 : 4 = 77,5 ⇒ Zeitdauer(310) = Zeitdauer(1)A277 ≈ 2,4A1021 Sekunden ≈ 7,7A1013 Jahre
(310-48) : 4 = 65,5 ⇒ Zeitdauer(310) = Zeitdauer(48)A265 ≈ 1,5A1021 Sekunden ≈ 4,7A1013 Jahre
Beide Zeitwerte haben die gleiche Größenordnung.
•
n = 464:
464 : 4 = 116 ⇒ Zeitdauer(464) = Zeitdauer(1)A2116 ≈ 1,3A1033 Sekunden ≈ 4,2A1025 Jahre
(464-48) : 4 = 104 ⇒ Zeitdauer(464) = Zeitdauer(48)A2104 ≈ 8,1A1032 Sekunden ≈ 2,6A1025 Jahre
Auch hier haben beide Zeitwerte die gleiche Größenordnung.
Für die Zeitdauer eines Jahres wurden bei den Berechnungen 365,256 Tage angesetzt (Schaltjahre!).
Zum Vergleich: Das Universum ist ungefähr 12A109 = 12 Milliarden Jahre alt. Die Faktorisierung
der 310-stelligen Zahl dauert damit schon über 6000-mal länger als das Universum alt ist!
Aufgabe:
Schreibe in Delphi ein Programm, das eine natürliche Zahl in ihre Primfaktoren zerlegt und sowohl
die einzelnen Primfaktoren als auch deren Gesamtanzahl ausgibt. Teste dein Programm unter
anderem mit den folgenden Zahlen:
•
1234567
•
22022007
•
23571113
•
994008131
•
2147483647
Hinweis: Um auch noch größere Zahlen mit dem Programm faktorisieren zu können, sollte der
Datentyp Int64 gewählt werden, der Zahlen bis 263-1 darstellen kann. Eine über ein Edit-Feld
eingegebene Zahl kann mit der Funktion StrToInt64 von einem String in diesen speziellen
Zahldatentyp umgewandelt werden.
Herunterladen