Twin primes
-
Hallo,
ich soll in c++ ein Programm schreiben, dass alle Primzahl-paare von 0 bis 1000 auflistet, die sich um 2 unterscheiden (z.B. 3,5). Ich soll zuerst mit einer Funktion isPrime(int a) überprüfen, ob eine Zahl eine Primzahl ist und diese anschließend in der main Funktion aufrufen. Die isPrime Funktion soll dabei, wenn sie nicht zutrifft mit einem break beendet werden.
Ich habe eine funktionierende Funktion, die Primzahlen auswirft, aber ich darf nur die bisher gelernten Mittel verwenden. Das heißt nur Schleifen, Bedingungen etc. , nichts mit memset oder anderen Bibliotheken als iostream und cmath.
Es wäre toll, wenn mir jemand helfen könnte,
liebe Grüße
Katharina.
-
Und? Wo ist Dein Problem? Du hast keine Frage gestellt.
-
Die isPrime Funktion soll dabei, wenn sie nicht zutrifft mit einem break beendet werden.
Nein, sicher nicht.
-
-
@Swordfish sagte in Twin primes:
@manni66 sagte in Twin primes:
Nein, sicher nicht.
ist sicher nur unglücklich formuliert.
Wenn es nur in deutsch und nicht in C++ unglücklich formuliert ist ...
-
@KathiJ sagte in Twin primes:
nichts mit memset oder anderen Bibliotheken als iostream und cmath.
Und mir wäre jetzt auch nicht klar, wozu ich memset oder irgendwelche weiteren Bibliotheken für Primzahlberechnung brauchen sollte.
Wo ist denn das Problem?
-
IsPrime: für alle i von 0 bis primzahlkandidat: wenn primzahlkandidat durch i teilbar: return keine primzahl return primzahl main: für alle i von 0 bis 1000: IsPrime für i aufrufen wenn i ist eine primzahl: IsPrime für (i + 2) aufrufen wenn (i + 2) ist eine primzahl: i und (i + 2) auf dem bildschirm ausgeben
achtung: das programm enthält noch einen sehr gravierenden fehler, auf den du selbst kommen musst (lerneffekt).
-
Das kriegen wir aber auch besser hin, ohne die fast gleiche Rechnung über 1000x zu wiederholen. Wir wissen ja schon, dass wir alle Zahlen bis 1000 prüfen müssen. Wenn es doch bloß irgendeine berühmte Methode für solche Fälle gäbe…
Wobei das effizienteste natürlich so etwas wie
cout << "(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), …";
wäre
-
-
@Wade1234 sagte in Twin primes:
IsPrime: für alle i von 0 bis primzahlkandidat: wenn primzahlkandidat durch i teilbar: return keine primzahl return primzahl
Im Bereich bis 1000 spielt Geschwindigkeit keine Rolle, aber grundsätzlich wird es wesentlich schneller, wenn man nur durch alle bisher gefundenen Primzahlen teilt, die kleiner als Wurzel aus Primzahlkandidat sind.
-
@Belli trwtf ist
i von 0
...
-
Jau
DAS hab ich gar nicht richtig bewertet ...
-
@SeppJ sagte in Twin primes:
Das kriegen wir aber auch besser hin, ohne die fast gleiche Rechnung über 1000x zu wiederholen. Wir wissen ja schon, dass wir alle Zahlen bis 1000 prüfen müssen. Wenn es doch bloß irgendeine berühmte Methode für solche Fälle gäbe…
ach die ist bestimmt so alt, dass die gar nicht mehr funktioniert.
Wobei das effizienteste natürlich so etwas wie
cout << "(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), …";
wäre
da fällt mir ein witz ein: ein mathematiker, ein physiker und ein ingenieur wollen herausfinden, wer am schnellsten die lösung von "1+1" herausfinden kann. der physiker verschwindet in seinem arbeitszimmer, nach einer woche kommt er wieder raus und sagt: "das ergebnis befindet sich irgendwo zwischen 1,9 und 2,1." Als nächstes geht der mathematiker in sein arbeitszimmer, nach 2 wochen kommt er wieder raus und sagt: "das ergebnis befindet sich zwischen 1,99 und 2,01."
zum schluss geht der ingenieur in sein arbeitszimmer, nach 2 minuten kommt er wieder raus und sagt: "das ergebnis ist 2." die beiden anderen wollen natürlich wissen, wie er so schnell zu der genauen lösung gekommen ist. antwort: "habe ich im tabellenbuch nachgelesen."@Swordfish sagte in Twin primes:
@Wade1234 sagte in Twin primes:
[...] i von 0 bis primzahlkandidat
echt jetzt!??
oller spielverderber.
-
Ich schlage einen anderen Algorithmus vor.
- Nach Eratosthenes googlen.
- Ergeblislinks durchlesen und verstehen.
- Ausprogrammieren.
- Jetzt noch überlegen, wie man an die Twins kommt.
Bei Fragen zu den einzelnen Schritten gerne nachfragen.