- 소수 판정법 중 하나
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다.
- 2는 소수이므로 오른쪽에 2를 쓴다.
- 자기 자신을 제외한 2의 배수를 모두 지운다.
- 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다.
- 자기 자신을 제외한 3의 배수를 모두 지운다.
- 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다.
- 자기 자신을 제외한 5의 배수를 모두 지운다.
- 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다.
- 자기 자신을 제외한 7의 배수를 모두 지운다.
- 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.
#include <stdio.h>
int number = 100000;
int a[1000001];
void primeNumberSieve() {
// 1. 배열을 생성하여 초기화한다.
for (int i = 2; i <= number; i++) {
a[i] = i;
}
// 2. 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.
// (지울 때 자기자신은 지우지 않고, 이미 지워진 수는 건너뛴다.)
for (int i = 2; i <= number; i++) {
if (a[i] == 0)
continue; // 이미 지워진 수라면 건너뛰기
// 이미 지워진 숫자가 아니라면, 그 배수부터 출발하여, 가능한 모든 숫자 지우기
for (int j = 2 * i; j <= number; j += i) {
a[j] = 0;
}
}
// 3. 2부터 시작하여 남아있는 수를 모두 출력한다.
for (int i = 2; i <= number; i++) {
if (a[i] != 0) printf("%d ", a[i]);
}
}
int main(void) {
primeNumberSieve();
return 0;
}
이 외의 소수 판정법
- 2부터 판별하는 수 전까지 나눠보고 나머지가 0이 아니라면 소수로 정의하는 방법
#include <stdio.h>
#include <string.h>
int primenumber(int n) {
int i;
int tmp = 1, count = 0;
if (n == 1)
tmp = 0;
for (i = 2; i < n/2; i++) {
if (n % i == 0)
tmp = 0;
}
if (tmp == 1)
count++;
printf("%d\n", count);
}
main() {
int N, count;
int num[100];
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &num[i]);
primenumber(num[i]);
}
}
- 해당 숫자의 절반까지만 확인하는 방법
int primenumber(int n) {
int i;
for (i = 2; i < n / 2; i++) {
if (n%i == 0)
return 1;
}
return 0;
}
- 해당 숫자의 제곱근까지 확인하는 방법
#include <stdio.h>
#include <math.h>
int isprimenumber(int n) {
int end = (int)sqrt(n);
for (int i = 2; i <= end; i++) {
if (n%i == 0)
return 1;
}
return 0;
}
※ 참고한 사이트 ※
소수(Prime Number) 구하기 효율적 알고리즘 :: 코드자몽
소수(Prime Number) 소수는 자신보다 작은 두개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다. ex) 5는 5*1 또는 1*5로 수를 곱합 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는
myjamong.tistory.com
blog.naver.com/ndb796/221233595886
22. 에라토스테네스의 체
에라토스테네스의 체는 가장 대표적인 소수(Prime Number) 판별 알고리즘입니다. 소수란 '양의 약수를 두...
blog.naver.com
[Algorithm] 에라토스테네스의 체
에라토스테네스의 체 란? 소수를 판별하는 알고리즘이다. 소수들을 대량으로 빠르고 정확하게 구하는 방법이다. 단일 숫자 소수 여부 확인 어떤 수의 소수의 여부를 확인 할 때는, 특정한 숫자
velog.io
에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2
ko.wikipedia.org
'Computer Science > Algorithm' 카테고리의 다른 글
#06. 덱(Deque) (0) | 2021.02.05 |
---|---|
#05. 큐(Queue) (0) | 2021.02.05 |
#04. 스택(Stack) (0) | 2021.02.05 |
#03. 유클리드 호제법, 유클리드 알고리즘(Euclidean algorithm) (0) | 2021.02.04 |
#01. 이분탐색(Binary Search), 이진탐색 (0) | 2021.02.04 |