사실 이번 문제는 에라스토테네스의 체를 이용하는 것 이외에는 별다른 좋은 방법은 없어보입니다.
큰 수에 대해서는 효율적인 알고리즘을 개발할 수 있지만, 2백만이라는 비교적 작은 수에 대한 것이라서 간단하게 짜보았습니다.
#define LIMIT 2000000
void solve1()
{
int primes[200000];
int count = 0;
int64_t sum = 0;
primes[count++] = 2; sum += 2;
primes[count++] = 3; sum += 3;
for( int p = 5 ; p < LIMIT ; p+=2 )
{
bool isPrime = true;
for( int i = 1; primes[i]*primes[i] <= p ; i++ )
{
if( p%primes[i] == 0 ) { isPrime = false; break; }
}
if( isPrime )
{
primes[count++] = p; sum += p;
}
}
printf("Ans = %jd\n", sum);
}
반응형
'Programming > Project Euler' 카테고리의 다른 글
| [C/C++] 프로젝트 오일러 #12 Highly Divisible Triangular Number (0) | 2014.12.29 |
|---|---|
| #11 : 그리드에서 가장 큰 곱수 구하기(Brute Force) (0) | 2014.12.28 |
| 9. 프로젝트 오일러 #9 : 합이 1,000인 피타고라스 수 구하기 (0) | 2014.12.23 |
| 8. 프로젝트 오일러 #8 : 가장 큰 곱하기 수 구하기. (0) | 2014.12.23 |
| 7. 프로젝트 오일러 #7 : 10,001번째 소수 찾기 (0) | 2014.12.23 |
댓글