본문 바로가기

Algorithm

소수 판별 알고리즘

어떤 수 n이 소수인지 판별하는 방법 중 가장 기본적인 것은

2부터 n-1까지 n에 대해 나눠보고 나눠지는 경우에는

소수가 아님을 판별하는 방법이 있다.

 

에라토스테네스 체의 특징을 이용하여 소수를 더 간단하게 구하는 방법이 있다.

예를들어 4를 소인수 분해하면 2*2가 나오고, 63을 소인수분해 해보면 3*3*7이 나온다.

이와 같이 합성수 m를 소인수분해 한 값들은 m의 제곱근보다 작거나 같음을 알 수 있다.

 

이를 이용하여 소수 판별 알고리즘을 작성하면 다음과 같다.

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
#include <stdio.h>
#include <math.h>
 
int main()
{
    int n;
    int i,j;
 
    printf("판별할 수를 입력하세요 : ");
 
    scanf("%d",&n);
 
    j = sqrt(n);
 
    for(i=2;i<=j;i++)
    {
        if(n%i==0)
        {
            printf("%d는 소수가 아닙니다\n", n);
            return 0;
        }
    }
 
    printf("%d는 소수입니다\n",n);
 
}
 
 

 

리눅스 환경이라면 gcc [소스파일명] -o [실행파일명] -lm 과 같은 방식으로 해주어야 한다.

-lm은 math library를 사용한다는 의미이다.

'Algorithm' 카테고리의 다른 글

네트워크 플로우(Network Flow) 및 이분 매칭(Bipartite Matching)  (0) 2022.03.07
Merge Sort  (0) 2022.02.20
ArrayList를 활용한 모든 경우의 수 탐색  (0) 2021.08.08
멱집합  (0) 2021.07.25
최대합 부분배열  (0) 2020.04.25