My favorites | Sign in
Project Logo
                
Changes to /trunk/java/src/com/google/code/projecteuler/Problem010_SieveOfErastothenes.java
r17 vs. r20   Edit
  Compare: r17 vs. r20   Format:
Revision r20
Go to: 
Project members, sign in to write a code review
/trunk/euler/src/com/google/code/projecteuler/Problem010_SieveOfErastothenes.java   r17 /trunk/java/src/com/google/code/projecteuler/Problem010_SieveOfErastothenes.java   r20
1 package com.google.code.projecteuler; 1 package com.google.code.projecteuler;
2 2
3 3
4 /** 4 /**
5 * The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. 5 * The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
6 * 6 *
7 * Find the sum of all the primes below two million. 7 * Find the sum of all the primes below two million.
8 * 8 *
9 * @link <a 9 * @link <a
10 * href="http://projecteuler.net/index.php?section=problems&id=10">Problem 10 * href="http://projecteuler.net/index.php?section=problems&id=10">Problem
11 * 10</a> 11 * 10</a>
12 * @link <a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of 12 * @link <a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of
13 * Eratosthenes</a> 13 * Eratosthenes</a>
14 * @author Cesar Arevalo 14 * @author Cesar Arevalo
15 */ 15 */
16 public class Problem010_SieveOfErastothenes { 16 public class Problem010_SieveOfErastothenes {
17 17
18 public static void main(String[] args) { 18 public static void main(String[] args) {
19 StopWatch stopWatch = new StopWatch(); 19 StopWatch stopWatch = new StopWatch();
20 stopWatch.start(); 20 stopWatch.start();
21 21
22 int limit = 2000000; 22 int limit = 2000000;
23 long squareOfLimit = Double.valueOf(Math.sqrt(limit)).longValue(); 23 long squareOfLimit = Double.valueOf(Math.sqrt(limit)).longValue();
24 long sumOfPrimes = 0; 24 long sumOfPrimes = 0;
25 int numberInIteration = 0; 25 int numberInIteration = 0;
26 long squareOfi = 0; 26 long squareOfi = 0;
27 27
28 int[] numbers = new int[limit]; 28 int[] numbers = new int[limit];
29 29
30 // 1. Consider a contiguous list of numbers from two to some maximum. 30 // 1. Consider a contiguous list of numbers from two to some maximum.
31 for (int i = 2; i <= limit; i++) { 31 for (int i = 2; i <= limit; i++) {
32 numbers[i - 2] = i; 32 numbers[i - 2] = i;
33 } 33 }
34 34
35 // for (Integer number : numbers) { 35 // for (Integer number : numbers) {
36 // System.out.println("number: " + number); 36 // System.out.println("number: " + number);
37 // } 37 // }
38 // System.out.println("---"); 38 // System.out.println("---");
39 39
40 // 2. Strike off all multiples of 2 greater than 2 from the list. 40 // 2. Strike off all multiples of 2 greater than 2 from the list.
41 int numberToStrikeOff = 0; 41 int numberToStrikeOff = 0;
42 int index2 = 2; 42 int index2 = 2;
43 43
44 for (int i = 1; i < squareOfLimit; i++) { 44 for (int i = 1; i < squareOfLimit; i++) {
45 numberToStrikeOff = i + 1; 45 numberToStrikeOff = i + 1;
46 squareOfi = i * i; 46 squareOfi = i * i;
47 47
48 index2 = i; 48 index2 = i;
49 while (index2 < numbers.length) { 49 while (index2 < numbers.length) {
50 numberInIteration = numbers[index2]; 50 numberInIteration = numbers[index2];
51 if (numberInIteration < squareOfi) { 51 if (numberInIteration < squareOfi) {
52 } 52 }
53 else if (numberInIteration % numberToStrikeOff == 0) { 53 else if (numberInIteration % numberToStrikeOff == 0) {
54 numbers[index2] = 0; 54 numbers[index2] = 0;
55 } 55 }
56 index2++; 56 index2++;
57 } 57 }
58 58
59 // for (Integer number : numbers) { 59 // for (Integer number : numbers) {
60 // System.out.println("number: " + number); 60 // System.out.println("number: " + number);
61 // } 61 // }
62 // System.out.println("---"); 62 // System.out.println("---");
63 } 63 }
64 64
65 for (Integer number : numbers) { 65 for (Integer number : numbers) {
66 sumOfPrimes += number; 66 sumOfPrimes += number;
67 // System.out.println("number: " + number); 67 // System.out.println("number: " + number);
68 } 68 }
69 // System.out.println("---"); 69 // System.out.println("---");
70 70
71 stopWatch.stop(); 71 stopWatch.stop();
72 System.out.println("time taken: " + stopWatch.getTime()); 72 System.out.println("time taken: " + stopWatch.getTime());
73 System.out.println("sumOfPrimes: " + sumOfPrimes); 73 System.out.println("sumOfPrimes: " + sumOfPrimes);
74 } 74 }
75 } 75 }
Hosted by Google Code