Testdaten für Primzahlprogramm und weiteres



  • Original erstellt von DasPinsch:
    Weil in den headern nur die prototypen stehen

    Und 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 Primzahlen 😞

    👍 Das 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 durchzutesten 😉 Aber wenn du noch 'nen Tipp hast, immer her damit, ich will ja auch noch was lernen 😉


Anmelden zum Antworten