728x90
728x170
문제10 : 이백만 이하 소수의 합
문제
10 이하의 소수를 모두 더하면 2 + 3 + 5 + 7 = 17 이 됩니다.
이백만(2,000,000) 이하 소수의 합은 얼마입니까?
문제 해결 방법
하나하나씩 계산하는 방식(브루트 포스 방식)으로 문제를 해결하였다. (에라토스네스 체 알고리즘 사용)
- 정답을 구하는데 약
20분이 걸렸다. (...) for
문을 사용하여 문제를 해결하였다.2
부터N(2000000)
까지 순회를 하며 소수를 찾으면sum
변수에 대입하고 더하는 과정을 반복하였다.
- 최종적으로
sum
변수에 할당된 값을 출력하도록 하였다.
소스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> using namespace std; #define N 2000000 bool isPrimeNum(int n); int main() { unsigned long long int sum = 0; for (register int i = 2; i <= N; i++) { if (isPrimeNum(i) == true) { sum += i; } } cout << sum << endl; return 0; } bool isPrimeNum(int n) { for (int i = 2; i < n; i++) { if ((n % i == 0) && (n != i)) { return false; } } return true; } |
정답
142913828922 |
심화 공부
소수의 합(Prime Sums)
처음 $n$개 소수의 합은, $n$이 작은 경우 에라토스테네스의 체 등으로 직접 구하는 것이 빠르고, $n$이 매우 클 경우 는 어림할 수 밖에 없다. 처음 몇 소수의 합은 2, 5, 10, 17, 28, 41, 58, 77, ... 이다. 에라토스테네스의 체를 구성할 수 없을 정도로 $n$이 매우 큰 경우 소수의 합은 다음과 같이 어림할 수 있다. 이백만 이하 소수의 합에 대해 아래 공식을 적용하면 대략 7.6%의 오차가 발생한다.
$$ \sum _{k=1}^{n}{p_k} ∼ \frac {1} {2} n^2 \ln{n} $$
참고로, 1737년에 오일러는 소수 역수의 합이 매우 느리지만 결국에는 무한대로 발산한다는 것을 보였다.
$$ \sum _{k=1}^{\infty}{\frac {1} {p_k}} = \infty$$
728x90
그리드형(광고전용)
'Problem Solving > Project Euler' 카테고리의 다른 글
[Project Euler #14][C++] 백만 이하로 시작하는 우박수 중 가장 긴 과정을 거치는 것은? (0) | 2020.12.28 |
---|---|
[Project Euler #13][C++] 50자리 수 100개를 더한 값의 첫 10자리 구하기 (0) | 2020.12.27 |
[Project Euler #12][C++] 500개 이상의 약수를 갖는 가장 작은 삼각수는? (0) | 2020.12.26 |
[Project Euler #11][C++] 20×20 격자에서 연속된 네 수의 곱 중 최댓값 (0) | 2020.12.26 |
[Project Euler #9][C++] a + b + c = 1000 이 되는 피타고라스 수 (0) | 2020.12.23 |
[Project Euler #8][C++] 1000자리 수 안에서 이어지는 5개 숫자의 곱 중 최댓값은? (0) | 2020.12.22 |
[Project Euler #7][C++] 10001번째의 소수 (0) | 2020.12.22 |
[Project Euler #6][C++] 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는? (0) | 2020.12.22 |