코딩뚠뚠

[백준문제풀이] 1978 소수찾기 본문

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

[백준문제풀이] 1978 소수찾기

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

 

풀이일시 : 2020-09-11

 

문제 :

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

입력 :

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

ex)

4

1 3 5 7

 

출력 :

주어진 수들 중 소수의 개수를 출력한다.

ex)

3

 

풀이 :

소수판별알고리즘인 에라토스테네스의 체를 이용해 구할수 있다.

1000이하의 소수를 미리 판별해놓고 입력이 들어오면 이에 대해 소수판별을 진행하면 된다.

 

에라토스테네스의 체 포스팅)

dbstndi6316.tistory.com/53

 

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

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

dbstndi6316.tistory.com

 

#include <iostream>
#define MAX 1001

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, count = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int x;
		cin >> x;
		if (a[x] == 0)
			count++;
	}
	cout << count;
	return 0;
}

 

 

반응형