Testdaten für Primzahlprogramm und weiteres
-
Original erstellt von DasPinsch:
Weil in den headern nur die prototypen stehenUnd wo ist dann der Quelltext ?
-
Der steckt schon kompiliert in den C-Biblitheken
.
-
Original erstellt von musicman:
Der steckt schon kompiliert in den C-Biblitheken.
Und wie finde ich diese obskuren C-Bibliotheken ?
-
Ich wollte das mal ausprobieren , hab allerdings die condefs.h nicht
ms visuall c++ 6.0 woher kriegt man die?
-
Okay, der Vollständigkeit halber hier ein paar Daten:
- im Tafelwerk stehen einige, bei mir 323 Stück bis 2141
- es gibt 19541 Primzahlen bis einschließlich 219.133
- und 36162 bis einschließlich 429.991
- 289 und 323 sind keine Primzahlen, wenn ihr Pech habt sagt das euer Prog aber
(17*17 und 17*19)------
@Der Altenburger
Ich hab mir dein Programm erst jetzt vorgenommen, weil es so kompliziert aussah
und das ist es auch schon ganz schön
(v.a. wegen der komischen Einrückung, wo hast du die gelernt
Nur hab ich noch ein paar Fragen und Hinweise:Warum nutzt du globale Variablen ? Brauchst doch nicht.
Wozu sind die Prototypen ? Die braucht man doch eigentlich nur bei eigenen
Funktionen, die nicht in den Headerdateien drin sind und selbst dann nicht unbedingt.
Wie funktioniert der Ausdruck i(((i+1)>>1)<<1)-1 ? Er macht ja aus geraden Zahlen ungerade, aber wie(so) funktioniert das ?
Warum schreibst du in stderr ?
Eine der beiden Zeilen if (i==1) i++ kann raus, am besten die obere.So und jetzt noch ein Tipp, wie du dein Programm ein Stückchen schneller machen
kannst:
Um zu testen, ob eine Zahl Teiler hat braucht man nur mit Primzahlen auf
Teilbarkeit überprüfen (, da man bei jeder Zahl eine Primteilerzerlegung
vornehmen kann). Da du aber von groß nach klein gehst, kannst du das nur
teilweise umsetzen, indem du j nach der Wurzelzuweisung ungerade machst
und in der darauffolgenden while-schleife um 2 verringerst.So das wärs erstmal.
-
Wie schnell bist du inzwischen? Sag mal, wieviel Zeit du brauchst, um die Primzahlen bis 10.000.000 zu zählen.
-
Das lohnt sich noch nicht zu posten. Noch zu langsam
-
Gregor schrieb:
Wie schnell bist du inzwischen? Sag mal, wieviel Zeit du brauchst, um die Primzahlen bis 10.000.000 zu zählen.
Hey, ich hab sowas auch mal gemacht
Ich finde alle 664579 Primzahlen bis 10000000 in 14 Sekunden
(bei 1.4 GHz)
Blos bis 100000000 dauert's schon knapp 10 Minuten für schlappe 5761455 PrimzahlenÜbrigens: Zu sqrt() gibt es eigentlich keinen Quellcode, die Runtime Lib bemüht für gewöhnlich auch nur den Koprozessor, der ist dafür optimiert und hat einen eigenen Befehl dafür (ich stand da vor dem gleichen Problem... Aber sqrt braucht nur einen Bruchteil der gesamten Rechenzeit, der Geschwindigkeitsvorteil ist minimal; es lohnt nicht, sich eine eigene Version von sqrt() zu schreiben)
Aber wenn's einen interessiert: Ich hab die Quadratwurzeln mal von Hand berechnet und brauche immerhin nur fünf Mal so lange wie das echte sqrt()Wenn ihr Code wollt, einfach sagen
-
tag schrieb:
Ich finde alle 664579 Primzahlen bis 10000000 in 14 Sekunden
(bei 1.4 GHz)
Blos bis 100000000 dauert's schon knapp 10 Minuten für schlappe 5761455 PrimzahlenDas ist ja schonmal ein guter Anfang!
Gib dir mal Mühe, damit du von der Geschwindigkeit her an z.B. mich oder Volkard rankommst. Wenn du in die Nähe kommst, sag ich Bescheid.
Tip 1 : Wenn du nicht nur die Zahl der Primzahlen, sondern auch die Primzahlen selber ausgibst, dann kostet das ne Menge Zeit. In dem Fall würde ich die Ausgabe der Primzahlen entfernen.
Tip 2 : Du wirst Mathe benötigen um wirklich schnell zu werden.
-
zu 1) Die Ausgabe zähle ich nicht mit; was glaubst du, wie ewig lange es dauert, um 5.000.000 Zahlen auszugeben
zu 2) nunja, bisher mache ich das alles über Primfaktorzerlegung. Das ist schon mal gewaltig schneller, als blind alle Zahlen durchzutestenAber wenn du noch 'nen Tipp hast, immer her damit, ich will ja auch noch was lernen