C++ Primzahlen suchen
-
asfdlol schrieb:
(zumal du das vermutliche bottleneck bei der probedivision-implementierung - das stückweise allozieren im vector - nicht nanntest): siebe.
Das Stückweise vergrößern eines std::vector mit push_back ist NICHT lahm.
-
asfdlol schrieb:
ich glaube, er hat nirgends gefragt wie man den code laufzeittechnisch optimieren kann, da gäbe es auch wesentlich bessere methoden (zumal du das vermutliche bottleneck bei der probedivision-implementierung - das stückweise allozieren im vector - nicht nanntest): siebe.
Richtig, aber der Code schrie gerade zu nach Optimierung. Die Punkte, die ich nannte, waren auch die offensichtlichen. Ob es noch mehr Verbesserungspotential gibt, habe ich nicht analysiert.
mfg Martin
-
SeppJ schrieb:
Offtopic: Gerade CPU-Hersteller sind unter den besten Anlaufstellen, wenn es um Optimierung geht. Der entscheidende Verkaufspunkt von CPUs ist, dass Software möglichst schnell auf ihnen läuft. Die Hersteller verwenden daher reichlich Energie darauf, dass möglichst viel Software möglichst schnell auf ihren CPU läuft.
Korrekt, war auch mehr als kleiner Joke und Denkanstoß gedacht.
mfg Martin
-
Mir ist klar, dass das Programm nicht effizient ist und es Optimierungsbedarf gibt. Aber Effizienz spielt für mich erstmal keine Rolle, da ich will, dass das Programm überhaupt läuft. Danach kann man natürlich optimieren. Trotzdem danke für die Vorschläge, das werde ich berücksichtigen.
asfdlol: Bei der nächsten Aufgabe werde ich versuchen, das Sieb von Eratosthenes zu benutzen.
mgaeckler: Der Compiler hat ja keinen Fehler ausgespuckt(deswegen kam ich ja
). Wenn du den Code aus dem TA nimmst, wird dein Compiler sicherlich auch keinen Fehler ausgeben. Ich benutze Visual C++ 2010 express
-
tryharder schrieb:
Der Compiler hat ja keinen Fehler ausgespuckt(deswegen kam ich ja
). Wenn du den Code aus dem TA nimmst, wird dein Compiler sicherlich auch keinen Fehler ausgeben. Ich benutze Visual C++ 2010 express
So lange Du keine syntaktischen Fehler machst oder irgendwelche anderen Fehler, die der Compiler bemerken kann, wird er Dir auch nix sagen. Ich meinte ja auch, daß Du den Debugger hättest bemühen müssen.
mfg Martin
-
Dieser Code
teilt / sammelt alle Primzahlen verdammt schnell, kann man es vielleicht noch einwenig verbessern??? Retorische frage! eine zeile? oder .. nein ... ja?int c=0; int zr=50; for(int i=zr;i>0;i--) { c=0; for(int z=1;z<=zr;z++){ if(i%z==0){ // wenn i durch z rest 0 ist könnte es eine primzahl sein c++; } if(c<=2&&z==i){ // wenn die zahl nur 2 mal teilbar ist, wo rest 0 ergibt ist es eine // primzahl printf(" (%d) ",i); break; } } }
-
Re: C++ Primzahlen suchen, diese ist eine der schnellsten kann man sie noch optimieren, (retorische frage)
int c=0; int zr=50; for(int i=zr;i>0;i--) { c=0; for(int z=1;z<=zr;z++){ if(i%z==0){ // wenn i durch z rest 0 ist könnte es eine primzahl sein c++; } if(c<=2&&z==i){ // wenn die zahl nur 2 mal teilbar ist, wo rest 0 ergibt ist es eine // primzahl printf(" (%d) ",i); break; } } }
Tryharder schrieb:
Hallo Leute,
Ich habe ein Problem mit diesem Code
cout << "n angeben.\n"; // die ersten n Primzahlen finden int n; cin >> n; int count = 0; int x = 0; vector<int> primzahlen; for(int zahl = 3; x<=n; ++zahl){ // Wenn x kleiner oder gleich n ist wird mit dem suchen aufgehört for(int probe = 2; probe < zahl; ++probe){ // jede Zahl wird durch eine "probezahl" geteilt if(zahl%probe == 0) // Kein Rest, dann Primzahl ++count; } if(count == 0){ // Wenn count unverändert, dann zahl in vector gespeichert primzahlen.push_back(zahl); count = 0; // Initialwert zuweisen ++x; // ++x erhöhen, es muss ja irgendwann die Bedingung in der ersten Schleife erfüllt werden } } for(unsigned int i = 0; i < primzahlen.size(); ++i) cout << primzahlen[i] << endl; // Zahlen werden ausgegeben
Aus irgendeinem Grund wird keine Primzahl ausgegeben, obwohl ich mir sicher bin, dass ich keinen Fehler gemacht habe(vllt. Logikfehler). Ich habe eine andere Version zum Primzahlen suchen geschrieben, welche Primzahlen bis zu einem Limit sucht, und diese Version funktioniert makellos.
Es wäre sehr nett, wenn sich jemand die Zeit nimmt und den Fehler entdeckt.mfg, tryharder