Kod: Zaznacz cały
void sito()
{
int sqrtSize = sqrtl(SIZE);
for (int i = 2; i <= sqrtSize; i++)
{
if (tab[i])
for (int j = 2 * i; j < SIZE; j += i)
tab[j] = false;
}
}
Kod: Zaznacz cały
100 tys - 0.000128 s
1 mln - 0.0022 s
10 mln - 0.124 s
100 mln - 1.67 s
1000 mln - 20.4 s
2000 mln - 43.2 s.
Ale teraz zmierzyłem ilość obrotów wewnętrznej pętli gdzie następuje powiększanie j oraz zerowanie tablicy:
Kod: Zaznacz cały
100 tys - 202152
1 mln - 2197837
10 mln - 23492026
100 mln - 248304140
1000 mln - 2599964546
Czyżby każde pole było wykreślane tylko 2 razy?
I czy oznacza że dla dużych tablic mamy jakiś kolosalne zwolnienie czasu? Między 1 mln i 10 mln na przykład..
Wiem : dla miliona nawet gdy zadeklarowałem pamięć przez new() mogło całość trzymać w cache, a potem już nie trzymało. Tym niemniej rośnie znacznie wolniej niż z podanego wzoru w Wikipedii i średnio 2 do 2.5 wykreślenia.