PS/백준

백준 / 수학 / 1929번 / 소수 구하기 / C++

KimMinJun 2021. 8. 2. 21:01

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의

소수가 하나 이상 있는 입력만 주어진다.

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

예제 입력 1 

3 16

예제 출력 1 

3

5

7

11

13

 

#include <iostream>
#define N 1000001
using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	int m, n;
	cin >> m >> n;
	
	bool arr[N];
	
	for(int i=0; i<N; i++) {
		arr[i] = true;
	}
	
	arr[0] = arr[1] = false;
	
	for(int i=2; (i*i)<N; i++) {
		if(arr[i]) {
			for(int j=i*2; j<N; j+=i) {
				arr[j] = false;
			}
		}
	}
	
	for(int i=m; i<=n; i++) {
		if(arr[i]) {
			cout << i << '\n';
		}
	}
	
	return 0;
}

에라토스테네스의 체를 사용하였다.

에라토스테네스의 체에 대한 내용은 밑의 게시글을 참고바랍니다.

 

2022.01.16 - [ALGORITHM/개념] - 에라토스테네스의 체

 

에라토스테네스의 체

에라토스테네스의 체는 고대 그리스 수학자 에라토스테네스가 발견한 소수 구하기 알고리즘이다. 알고리즘 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. (위는 120까지가 예시) 짝수

jun-coding.tistory.com