Kann man da noch was rausholen?
-
#include <iostream> #include <cstring> void sieb(int n) { n = (n - 1) / 2; char* array = new char[n]; memset(array, 1, n); for(int i = 0; i < n; ++i) { if(array[i]) { int x = 2 * i + 3; for(int y = x + i; y < n; y += x) { array[y] = 0; } std::cout << x << " "; } } delete[] array; } int main() { sieb(1000000); return 0; }
Geht da noch was? Welche Verfahren wären denn noch besser geeignet für den Computer?
-
Ist (a<<1) nicht fixer als (a*2) ? (Analog >>1 statt /2)
EDIT:
Und weiss nicht ob der Compiler das selber macht (wahrscheinlich schon), aber könnte es auch langsamer werden wenn in jeder Schleife int x bzw. int y steht?
Kann ja sein, dass dann jedesmal erst geschaut wird, ob x,y schon als int initialisiert wurde....naja, kein Plan so richtig...vielleicht als DenkanstoßEDIT2:
Okay, dann ist mein Edit wohl auch hinfällig.
-
Nö, das sieht der Compiler nämlich auch.
-
nimm printf statt cout *G*
-
Ok, aber die Ausgabe dürfte eb das langsamste an der ganzen Sachen gewesen sein