Algorithm
boolean[] sieve(int n) {
boolean[] isPrime = new boolean[n + 1];
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; (long)i * i <= n; i++)
if (isPrime[i])
for (int j = i * i; j <= n; j += i) isPrime[j] = false;
return isPrime;
}Advertisement
Start at i²
Smaller multiples already marked by smaller primes. Saves time.
Advertisement
Linear sieve
Each composite marked exactly once by its smallest prime factor. Slightly faster, O(N).