티스토리 뷰

Source

문제

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

입력

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

출력

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

예제 입력 1

4
1 3 5 7

예제 출력 1

3

해설

술 마시면서 코딩하지 말자. 귀찮다, 만사가. 귀찮으니까 해설도 간단히 쓰자. 소수는 1과 자기 자신만을 약수로 하는 수이다. 그런데 약수라는 게 n(테스트할 수)/2을 기준으로 그보다 작은 수와 그보다 큰 수가 짝이 된다. 따라서 테스트할 수를 2로 나눈 수까지만 테스트하면 된다.
n / 2값을 2부터 나누어서 한번이라도 나머지가 0인 경우를 만나면 이건 소수가 아니다. 소수가 아닌 경우에는 0을, 소수인 경우에는 1을 리턴하는 함수 check_prime()을 아래와 같이 작성한다.

int CheckPrime(void)
{
    int test, half_test;
    int i = 2;
    scanf("%d", &test);
    half_test = test / 2;
    if (test == 1) {
        return 0;
    }
    while ( i <= half_test ) {
        if (test % i == 0 ) {
            return 0;
        }    
        i++;    
    }
    return 1;
}

이 함수의 리턴값을 누적하여 출력하면 테스트 케이스가 소수인 경우의 합계가 구해진다. 코드를 완성하면 아래와 같다.

소스 코드: C

#include <stdio.h>
int check_prime();
int CheckPrime(void);
int main(int argc, char *argv[])
{
    int i, test_case, sum = 0;
    scanf("%d", &test_case);
    for (i = 0; i < test_case; ++i) {
        sum += CheckPrime();
    }
    printf("%d\n", sum);
    return 0;
}

int CheckPrime(void)
{
    int test, half_test;
    int i = 2;
    scanf("%d", &test);
    half_test = test / 2;
    if (test == 1) {
        return 0;
    }
    while ( i <= half_test ) {
        if (test % i == 0 ) {
            return 0;
        }    
        i++;    
    }
    return 1;
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함
02-18 12:33