Für einen Anfänger ist die Umsetzung wirklich gut gelungen, hier noch ein paar Tipps:
Das Array ist schon mit false initialisiert, die erste Schleife kann also weggelassen werden. Die letzte lässt sich ebenfalls entfernen, indem sie in die mittlere integriert wird. Außerdem sollte der Algorithmus allgemein einsetzbar gemacht werden, indem er IEnumerable<int> zurückgibt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| using System; using System.Collections.Generic;
static class SieveOfEratosthenes { public static IEnumerable<int> FindPrimes(int limit) { bool[] sieve = new bool[limit + 1]; int limitSqrt = (int)Math.Sqrt(limit);
for (int i = 2; i <= limit; i++) if (!sieve[i]) { yield return i; if (i <= limitSqrt) for (int j = i * i; j <= limit; j += i) sieve[j] = true; } } } |
Viel mehr zu optimieren würde ich gar nicht versuchen, dafür nimmt man einfach einen besseren Algo

.