7.6 소수 판단 예제

공기훈·2021년 9월 15일
0

홍정모의 따배씨

목록 보기
48/49

소수인지 아닌지 판단.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

int main()
{
    unsigned num;
    bool isPrime = 0;

    scanf("%u", &num);
    
    isPrime = true;

    for (unsigned div = 2; div < num; ++div)
    {
        if (num % div == 0)
            isPrime = false;
        else
            ;
    }

    if (isPrime)
        printf("%u is a prime number.\n", num);
    else 
        printf("%u is not a prime number.\n", num);
    


    return 0;
}

isPrime의 디폴트 값은 true인 1이다. 소수는 어떤 수에 의해 완벽하게 나누어 떨어지면 안 된다.
나누어 떨어지면 소수가 아니므로 false값인 0을 갖게한다.
소수면 한 번도 안 나눠졌을 것이므로 1을 그대로 갖고, if(1)이면 그대로 실행 시킨다.

약수 출력

	for (unsigned div = 2; (div*div) <= num; ++div)
    {
        if (num % div == 0)
        {
            isPrime = false;
            printf("%u is divisible by %u and %u.\n", num, div, num / div);
        }
        else
            ;
    }
    

저렇게 바꾸게 되면, 최대 루트 값까지만 출력하고, num/div를 통해 나머지 약수를 출력해준다.

하지만, 64 같은 경우는 8 and 8로 나온다.
이를 하나의 8로 줄이기 위해서는

	for (unsigned div = 2; (div*div) <= num; ++div)
    {
        if (num % div == 0)
        {
            isPrime = false;
            if (num == div * div)
                printf("%u is divisible by %u\n", num, div);
            else
                printf("%u is divisible by %u and %u.\n", num, div, num / div);

        }
        else
            ;
    }

이렇게 코드를 짜주면 된다.

profile
be a coding master

0개의 댓글