이경수 선생님의 수학실험실

Problem 10(Summation of primes) 본문

Project Euler

Problem 10(Summation of primes)

(이경수) 2019. 2. 9. 17:47

Problem 10(Summation of primes)

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.



In Python:

import time

startTime = time.time()
primes = []
signPrimes = []

for i in range(1, 2 * pow(10, 6) + 2):
signPrimes.append(1)

signPrimes[0] = 0
signPrimes[1] = 0
signPrimes[2] = 1

for i in range(2, 2 * pow(10, 6) + 1):
if signPrimes[i] == 0:
pass
else:
primes.append(i)
for j in range(1, int(2 * pow(10, 6) / primes[-1])):
signPrimes[(j + 1) * primes[-1]] = 0
print(sum(primes))
print(time.time() - startTime, "seconds")

Run time: 8.704661130905151 seconds



In Java:


//Euler10 Summation of primes

package project_euler;


import java.util.ArrayList;


public class Euler10 {

public static void main(String[] args) {

long startTime = System.currentTimeMillis();

long sum = 0;

ArrayList<Integer> primes = new ArrayList<Integer>();

ArrayList<Integer> signPrimes = new ArrayList<Integer>();

for (int i = 0; i < 2 * Math.pow(10, 6) + 1; i++) {

signPrimes.add(1);

}

signPrimes.set(0, 0);

signPrimes.set(1, 0);

signPrimes.set(2, 1);

for (int i = 2; i < 2 * Math.pow(10, 6) + 1; i++) {

if (signPrimes.get(i) == 1) {

primes.add(i);

for (int j = 2; j < Math.floor(2 * Math.pow(10, 6) / i) + 1; j++) {

signPrimes.set(j * i, 0);

}

}

}

for (int i = 0; i < primes.size(); i++) {

sum += primes.get(i);

}

System.out.println(sum);

long endTime = System.currentTimeMillis();

System.out.println((double)(endTime - startTime) / (double) 1000 + "seconds");

}

}


Run time: 4.577seconds



solution: 142913828922



[from Project Euler: https://projecteuler.net/problem=10]








Comments