백준/c

백준_1929_소수구하기

S0LL 2024. 5. 12. 01:46

입력받은 m과 n 사이의 소수를 구하는 문제입니다.

 

소수란, 약수가 1과 자기 자신인 수를 뜻하죠.

 

가장 흔하게, 2부터 자기 자신-1 까지 나누어지는지 검사하여 소수인지 판별합니다.

 

하지만 문제에서 1백만까지 입력받을 수 있기 때문에 위의 방법대로라면, 시간이 너무 오래 걸립니다.

 

 

 

여기서 소수의 성질을 하나 더 알아야 합니다.

 

소수는 자기 자신의 제곱근 이하의 자연수 로 나누었을 때 1을 제외하고 나누어떨어지지 않습니다.

 

ex) 16의 제곱은은 4이죠. 2 , 3 , 4 로 나누면 나누어 떨어지므로 소수가 아닙니다.

53의 제곱근은 7.xx 이죠. 2 , 3 , 4 , 5 , 6 , 7 중 어떤 것으로도 나누어 떨어지지 않으므로 소수입니다.

 

이제 이 방식을 코드로 구현해 봅시다.

 

 

전체 코드)

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

int decimal(int n);

int main(void)
{
    int a, b;
    scanf("%d %d", &a, &b);

    if (a == 1)
    {
        a++;
    }

    for (int i = a; i <= b; i++)
    {
        decimal(i);
    }
    return 0;
}

int decimal(int n)
{
    int temp = sqrt(n);
    for (int i = 2; i <= temp; i++)
    {
        if (n % i == 0)
        {
            return -1;
        }
    }
    printf("%d\n", n);
    return 1;
}

 

소수의 성질을 이용해 풀 수 있는 문제입니다.

'백준 > c' 카테고리의 다른 글

백준_11866_요세푸스문제0  (0) 2024.05.15
백준_1654_랜선자르기  (0) 2024.05.14
백준_10816_숫자카드2  (0) 2024.05.08
백준_2839_설탕배달  (0) 2024.05.08
백준_24511_queuestack  (0) 2024.05.08