본문 바로가기

알고리즘 공부/백준

1978 소수 찾기 with C++

문제

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

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

www.acmicpc.net

해결한 방법

입력값을 2부터 입력값의 제곱근보다 낮은 수로 나눴을때 나누어 떨어지면 합성수 나누어 떨어지지 않는다면 소수로 판단합니다.

for문은 조건을 먼저 따지기 때문에 for문 내부 코드가 실행되지 않아서 숫자 2, 3에 예외를 두지 않아도 됩니다.

1도 2와 3과 같이 소수로 처리되기 때문에 예외처리를 해줬습니다.

#include <iostream>
using namespace std;

bool is_prime(int a) {
	if (a == 1)
		return false;

	for (int i = 2; i*i <= a; i++){
		if (a % i == 0)
			return false;
	}
	return true;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	int n;
	cin >> n;

	int count = 0;
	int input;
	while (n--) {
		cin >> input;
		if (is_prime(input))
			count++;
	}
	cout << count;

	return 0;
}