1978번: 소수 찾기

문제:

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

입력:

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

풀이:

🔍 이 문제의 경우 구해야 되는 소수의 최대 개수가 1,000으로 적은 편에 속하고 시간도 넉넉하게 주어졌으므로 에라토스테네스의 체를 이용하지 않고 풀어도 괜찮다. 다만 개수가 많아질 경우에는 에라토스테네스의 체 알고리즘을 이용하는게 편하다. 이에 관해서는 #1929: 소수 구하기 문제에서 자세히 다루니 관심 있다면 한번 확인해 보는 것이 좋을 것 같다.

코드:

#include <iostream>
#include <math.h>

using namespace std;

int main(){
	bool isPrime;
	int n, answer = 0;
	//입력 
	cin >> n;
	for(int i = 0; i < n; i++){
		int temp;
		cin >> temp;
		isPrime = true; //false로 바뀌었을 수도 있는 isPrime값 true로 초기화
		//숫자의 루트 값까지의 모든 값이 배수가 될 수 있는지 확인 
		for(int j = 2; j <= (int)sqrt(temp); j++){
			//약수가 있는 경우(나누어 떨어지는 경우) 
			if(temp % j == 0){
				isPrime = false;
				break;
			}
		}
		//1은 소수가 아니므로 제외 
		if(temp!=1 && isPrime) answer++;
	}
	//출력 
	cout << answer;
}