원문 : 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.
10 미만의 소수의 합은 2 + 3 + 5 + 7 = 17 입니다.
2000000 미만의 소수의 합을 구하십시오.
계속해서 나오는 소수 문제네요. [ 3. Largest prime factor ] 에서는 가장 큰 소인수를, [ 7. 10001 st pime ] 에서는 n 번째 소수를, 이 번에는 일정 이하의 소수의 합을 구하는 겁니다.
Brute-Force
일단 답은 142913828922 입니다.
나름대로 최적화를 한다고 했지만 O( mn ) 의 시간 복잡도를 가집니다. m 과 n 의 크기가 크므로 비용이 장난이 아닙니다. 한 10 분은 걸린 것 같군요.
소수와 관련해서 점점 더 극악한 조건을 제시하면서 결국에는 최적화를 더 하게 만드는군요.
Others Optimization
[ 7. 10001 st pime ] 의 공식 [ PDF ] 에서 최적화를 위해 사용한 전제들은 다음과 같습니다.
- 1 은 소수가 아님.
- 2 를 제외한 모든 소수는 홀수임.
- 3 보다 큰 모든 소수는 6k+/-1 로 작성될 수 있음.
- 어떤 수 n 은 루트 n 보다 큰 소수를 하나만 가지고 있을 수 있음.
- 어떤 수 n 에 대한 소수 테스트를 하기 위한 수열은 : n 을 나누는 루트 n 보다 작거나 같은 숫자 f 를 발견하지 못한다면, n 은 소수임 : n 의 유일한 소인수는 n 자체임.
뭔가 최적화의 여지가 상당히 많군요.
실행해 보니 정상적인 결과가 나왔고, 무진장 빠르군요. 이것도 사실 O( mn ) 의 비용이 듭니다만, Brute-Force 방식보다는 m 과 n 의 크기가 작으므로 매우 빠릅니다. 거의 20 초 정도면 끝나는군요.
'물리_수학_기하학 > Project Euler' 카테고리의 다른 글
[ Project Euler With Python ] 12. Highly divisible triangular number (0) | 2019.03.08 |
---|---|
[ Project Euler With Python ] 11. Largest product in a grid (0) | 2019.02.21 |
[ Project Euler With Python ] 9. Special Pythagorean triplet (0) | 2019.01.30 |
[ Project Euler With Python ] 8. Largest product in a series (0) | 2019.01.29 |
[ Project Euler With Python ] 7. 10001st prime (0) | 2019.01.28 |
[ Project Euler With Python ] 6. Sum square difference (0) | 2019.01.24 |
[ Project Euler With Python ] 5. Smallest multiple (0) | 2019.01.23 |
[ Project Euler With Python ] 4. Largest palindrome product (0) | 2019.01.21 |
[ Project Euler With Python ] 3. Largest prime factor (0) | 2019.01.19 |
[ Project Euler With Python ] 2. Even Fibonacci numbers (0) | 2019.01.18 |