(C언어) 백준 1929. 소수 구하기

문제

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; 
}