- 우선 2를 제외한 모든 짝수들은 소수가 아니다라는 점
- 만약 N이 합성수라면 N = a * b형태이므로(a > 1 && b > 1), a와 b 둘 중 하나는 sqrt(N)보다 작거나 같음을 알 수 있다.
그러므로 N을 2부터 sqrt(N)까지 나눠보아 나누어지지 않으면 N은 소수가 된다.
다음은 2부터 N까지 소수를 구하여 prime이라는 배열에 반영하는 코드의 핵심 함수이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void check_prime(int number){ for (int i = 2; i <= number; i++){ if (i % 2 == 0 && i != 2){ prime[i] = 0; continue; } bool isPrime = true; for (int j = 2; j*j <= i; j++){ if (i % j == 0){ isPrime = false; break; } } if (isPrime) prime[i] = 1; } } | cs |
'알고리즘' 카테고리의 다른 글
퇴각 검색(BackTracking) (0) | 2015.04.22 |
---|---|
완전탐색 경우의 수를 재귀로 수행하는 방법 (0) | 2015.04.15 |
DP(Dynamic Programming)패턴 연구 (0) | 2015.04.03 |
최대공약수 구하기 (0) | 2015.03.25 |
한붓그리기 조건에 대해서(오일러 서킷, 오일러 트레일) (0) | 2015.03.25 |