본문 바로가기
카테고리 없음

[예제] C언어로 1~500 사이의 두 홀수의 소수 구하는 방법

by heydayz 2024. 8. 8.

C언어로 1~500 사이의 두 홀수의 소수 구하는 방법 시뮬레이션

C언어로 1과 500사이의 두 홀수의 소수를 구하는 방법읭 프로그램을 만들기 위해선 소수와 홀수의 개념이 필요하다.소수란 1과 자기 자신으로만 나누어 떨어지는 양의 정수를 말하며 홀수는 2로 나누어 떨어지지 않는 정수를 의미한다. 해당 프로그램을 관련 프로그램으로 만들기 위해선 math.h 라이브러리가 필요하다. sqrt 함수는 일반적인 소수 판별 알고리즘에서 자주 사용되지 않는 sqrt 함수를 활용할 예정입니다. 그리고 짝수를 제외하고 홀수만 검사하는 부분을 명시적으로 표현할 것이며 두 개의 홀수 소수를 찾으면 즉시 반복문을 종료하는 부분으로 코드를 완성할 것입니다.

<stdio.h>: 표준 입출력 라이브러리
<math.h>: 수학 함수 라이브러리 (sqrt 함수 사용)

이 코드는 1~500 사이의 두 홀수 소수를 구하는 간단한 예제입니다. 더 큰 범위의 수를 다루거나 더 효율적인 알고리즘을 구현하려면 에라토스테네스의 체 등 다른 알고리즘을 활용할 수 있습니다.

코드 구현 및 설명

#include <stdio.h>
#include <math.h>

// isPrime 함수: 주어진 수가 소수인지 판별하는 함수
int isPrime(int num) {
    if (num <= 1) {
        return 0; // 1 이하의 수는 소수가 아님
    }
    if (num % 2 == 0) {
        return num == 2; // 2는 유일한 짝수 소수
    }
    for (int i = 3; i <= sqrt(num); i += 2) { // 홀수만 검사
        if (num % i == 0) {
            return 0; // 약수가 존재하므로 소수가 아님
        }
    }
    return 1; // 약수가 없으므로 소수임
}

int main() {
    int count = 0;
    for (int i = 1; i <= 500; i++) {
        if (isPrime(i) && i % 2 != 0) { // 홀수이고 소수인 경우
            printf("%d ", i);
            count++;
            if (count == 2) { // 두 개의 홀수 소수를 찾았으면 종료
                break;
            }
        }
    }
    printf("\n");

    return 0;
}

int isPrime(int num) : isPrime 함수는 주어진 수가 소수인지 판별하는 함수
if (isPrime(i) && i % 2 != 0) : 홀수이고 소수인 경우
if (num <= 1) { return 0;} : 1 이하의 수는 소수가 아님
if (count == 2) : 두 개의 홀수 소수를 찾았으면 종료

코드설명

isPrime 함수: 주어진 수가 1 이하이면 소수가 아님, 2는 유일한 짝수 소수, 3부터 sqrt(num)까지 홀수만 검사하여 약수가 있는지 확인 약수가 없으면 소수임
main 함수: count 변수: 찾은 홀수 소수의 개수를 세기 위한 변수, 1부터 500까지 반복하며 각 수에 대해 isPrime 함수를 호출하여 소수인지 확인, 홀수이고 소수인 경우 출력하고 count를 증가 count가 2가 되면 두 개의 홀수 소수를 찾았으므로 반복문 종료

sqrt 함수 활용: 소수 판별 시 sqrt(num)까지 검사하여 효율성을 높였습니다.
홀수만 검사: 짝수는 2를 제외하고 소수가 될 수 없으므로 홀수만 검사하여 불필요한 연산을 줄였습니다.
조기 종료: 두 개의 홀수 소수를 찾으면 즉시 반복문을 종료하여 불필요한 연산을 줄였습니다.
명확한 주석: 각 코드 부분에 대한 설명을 추가하여 코드의 가독성을 높였습니다.