문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
풀기 전 로직 생각
- N을 입력받고 N만큼 입력받도록 반복문을 넣는다.
- 입력 받을때마다 약수들의 합을 넣을 isper를 1로 초기화시킨 후 약수인지 판별하여 약수면 isper에 합해지도록 한다.
- isper이 1이거나 num이 1이 아니면 count를 1씩 증가시킨다. (isper이 1 그대로 나왔다는것은 약수가 없었기 때문)
- 입력 반복문이 끝나면 count를 출력시킨다.
코드
#include <iostream>
using namespace std;
int main() {
int N; //어떤 숫자
cin >> N;
int num; //입력 받을 값
int count=0; //소수 갯수
for(int i=0; i<N; i++) { //N만큼 반복
int isper=1; //약수들의 합
cin >> num; //N만큼 입력받을 값
for (int i = 2; i < num; i++) { //약수 판별
if (num % i == 0) {
isper += i; //약수들의 합 구하기
}
}
//약수의 합이 1이면 약수가 없어서 더해지지 않았다.
//그리고 1은 소수가 아니므로 num이 1이여서도 안된다.
if (isper == 1 && num!= 1) {
count++;
}
}
cout << count;
return 0;
}
결과