@@ -24,28 +24,22 @@ public static boolean isPrime(int n) {
24
24
/* Solution 2: Sieve of Eratosthenes */
25
25
public static boolean [] generatePrimes (int max ) {
26
26
boolean [] flags = new boolean [max + 1 ];
27
- initialize (flags );
27
+ for (int i = 2 ; i < flags .length ; i ++) {
28
+ flags [i ] = true ;
29
+ }
30
+
28
31
int prime = 2 ;
29
32
int sqrt = (int ) Math .sqrt (max );
30
33
while (prime <= sqrt ) { // see comment in crossOff() to see why we stop at sqrt(max)
31
- crossOff (flags , prime );
34
+ crossOffMultiplesOfPrime (flags , prime );
32
35
prime = getNextPrime (flags , prime );
33
36
}
34
37
return flags ;
35
38
}
36
39
37
- private static void initialize (boolean [] flags ) {
38
- flags [0 ] = false ;
39
- flags [1 ] = false ;
40
- for (int i = 2 ; i < flags .length ; i ++) {
41
- flags [i ] = true ;
42
- }
43
- }
44
-
45
- /* Cross off multiples of prime from our array */
46
- private static void crossOff (boolean [] flags , int prime ) {
47
- /* We can start with (prime*prime), because if we have k * prime, where k < prime,
48
- this value would have already been crossed off in a prior call to this function */
40
+ private static void crossOffMultiplesOfPrime (boolean [] flags , int prime ) {
41
+ // We can start with (prime*prime), because if we have k * prime, where k < prime,
42
+ // this value would have already been crossed off in a prior call to this function
49
43
for (int i = prime * prime ; i < flags .length ; i += prime ) {
50
44
flags [i ] = false ;
51
45
}
0 commit comments