코딩뚠뚠

[백준문제풀이] 1929 소수구하기 본문

알고리즘 문제풀이/백준문제풀이

[백준문제풀이] 1929 소수구하기

로디네로 2020. 12. 31. 01:23
반응형

 

풀이일시 : 2020-09-11

 

문제 :

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

 

입력 :

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

ex)

3 16

 

출력 :

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

ex)

3

5

7

11

13

 

풀이 :

N과 M 사이에 있는 소수들을 구해야 하는데 다만 숫자의 크기가 최대 1000000까지 나올 수 있다는 점에서 반드시 에라토스테네스의 체를 이용하여 소수를 판별해야한다.

 

dbstndi6316.tistory.com/53

 

[기본문제풀이] 에라토스테네스의 체

풀이 일시 : 2020-08-13 ​ 에라토스테네스의 체 : 소수(prime number) 판별 알고리즘이다. 어떤 수로도 나뉘어지지 않아야 되기 때문에 그 수를 나눠보면서 판단할 수 있다.. -> 이 방법은 O(N)의 복잡도

dbstndi6316.tistory.com

#include <iostream>
#define MAX 1000001

using namespace std;

int a[MAX];

int main() {
	a[1] = 1;
	for (int i = 2; i < MAX; i++) {
		for (int j = i * 2; j < MAX; j += i) {
			// 4 6 8 10 12 14 16 18 ... 2의배수 중 소수인2만빼고
			// 6 9 12 15 18 21 24 27 30 ... 3의배수 중 소수인 3만빼고
			// 8 12 16 20 24 28 32 36 ... 4의배수 중 4는이미제외
			if (a[j] == 1)
				continue;
			else
				a[j] = 1;
		}
	}
	int n, m;
	cin >> n >> m;
	for (int i = n; i <= m; i++) {
		if (a[i] == 0)
			cout << i << '\n';
	}
	return 0;
}

 

반응형