에라토스테네스의 체로 풀어 봅시다.
제약사항)
시간 : 2 초
메모리 : 256 MB
문제)
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력)
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1<=M<=N<=1,000,000)
출력)
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
입출력 예제
입력 | 출력 |
3 16 | 3 5 7 11 13 |
풀이 순서)
위 링크에서 에라토스테네스의 체의 개념을 확인할 수 있습니다.
에라토스테네스의 체 개념을 이용하여 소수가 아니라면 num[n]=0을 대입하고,
num[M] ~ num[N] 사이에 그 값이 0인 경우 해당 인덱스 값을 출력합니다.
소스코드 및 결과 (C)
#include <stdio.h>
#include <math.h>
#define size 1000001
int num[size] = { 0, };
int main() {
int M, N, i, j;
int tmp = 0;
for (i = 2; i < size; i++)
num[i] = i;
scanf("%d %d", &M, &N);
tmp = (int)sqrt(N);
for (i = 2; i <= tmp; i++) {
if (num[i] == 0)
continue;
else {
for (j = i + 1; j <= N; j++) {
if (num[j] == 0)
continue;
if (num[j] % i == 0)
num[j] = 0;
}
}
}
for (i = M; i <= N; i++) {
if (num[i] != 0)
printf("%d\n", i);
}
return 0;
}
메모리 : 5028 KB
시간 : 304 ms
코드길이 : 501 B
'[C언어] 백준온라인 > * 수학 2' 카테고리의 다른 글
[C 언어] 백준 1085. 직사각형에서 탈출 (0) | 2020.01.15 |
---|---|
[C 언어] 백준 9020. 골드바흐의 추측 (0) | 2020.01.15 |
[C 언어] 백준 4948. 베르트랑 공준 (0) | 2020.01.15 |
[C 언어] 백준 2581. 소수 (0) | 2020.01.15 |
[C 언어] 백준 1978. 소수 찾기 (0) | 2020.01.15 |