반응형
문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
구상
에라토스테네스의 체를 이용한다.
코드
#include <stdio.h>
#include <stdlib.h>
#define NUM 1000000
int main(void)
{
int i, j, start, end;
scanf("%d%d", &start, &end);
int* prime = (int*)malloc(sizeof(int) * NUM + 1); //배열 동적할당
for (i = 0; i <= end; i++) //각 요소 초기화
prime[i] = i; prime[1] = 0; //1은 소수가 아니므로 0
for (i = 1; i <= end; i++) {
if (prime[i] == 0) continue; //배열 요소가 0이면 소수가 아니므로 건너뜀
for (j = 2 * i; j <= end; j += i)
prime[j] = 0;
}
for (i = start; i <= end; i++) {
if (prime[i] != 0) printf("%d\n", prime[i]);
}
return 0;
}
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
[파이썬] 백준 2231. 분해합 (0) | 2020.12.22 |
---|---|
[파이썬] 백준 1157. 단어 공부 (0) | 2020.11.22 |
(C언어) 백준 2798. 블랙잭 (0) | 2020.09.11 |
(c언어) 백준 10809. 알파벳 찾기 (1) | 2020.09.09 |
(C언어) 백준 2675. 문자열 반복 (0) | 2020.09.07 |