- toc {:toc}
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
출처:https://www.acmicpc.net/problem/1978
풀이
- 소수가 아닐 경우를 생각. > 약수를 가지고 있는 경우 대칭성을 띤다. i * i < N인 경우에서만 생각하면 됨.
- 위의 경우에서 약수를 가지고 있지 않으면 소수가 됨.
#include <iostream>
using namespace std;
bool is_primeNum(int x);
int main()
{
int N, x, num=0;
cin >> N;
for(int i=0; i<N; i++)
{
cin >> x;
if(x == 1) continue;
if(is_primeNum(x))
num++;
}
cout << num << endl;
return 0;
}
bool is_primeNum(int x)
{
int i = 2;
while(i*i<=x)
{
if(x%i==0)
return false;
i++;
}
return true;
}