본문 바로가기
프로그래밍/C++

[C++] 소수(Prime Number) 효율적으로 구하기

by 워킹독 2022. 12. 9.
728x90

 

소수(Prime Number)

https://ko.wikipedia.org/wiki/%EC%86%8C%EC%88%98_(%EC%88%98%EB%A1%A0) 

 

소수 (수론) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 각각의 자리에 놓인 숫자와 소수점을 통해 나타낸 실수(小數)에 대해서는 소수 (기수법) 문서를 참고하십시오. 좌측은 소수, 우측은 합성수. ...소수란 1보다 큰

ko.wikipedia.org

 

소수 판별하기 알고리즘

  • 어느 수까지 판별하는 수를 나눠서 나머지가 0이 안나오면 소수로 인정
  • 소수를 판별하는 가장 효율적인 방법은 해당 숫자의 √N 까지 확인하는하는 것

 

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
29
// num가 소수인지 판별
 
// 1) i의 제곱근으로 판단
bool prime_number(int num) {
    bool isDisimal = true;
    for(int i = 2; i*<= num; i++) {
        if(num % i == 0) {
            // not prime_number
            isDisimal = false;
            break;
        }
    }
 
    return isDisimal;
}
 
// 2) sqrt 함수 사용
#include <cmath>
bool prime_number(int num) {
    bool isDisimal = true;
    for(int i = 2; i <= sqrt(num); i++) {
        if(num % i == 0) {
            // not prime_number
            isDisimal = false;
            break;
        }
    }
    return isDisimal;
}
cs

 

동일한 결과이므로 편한 방식으로 사용하면 됩니다.

for(int i = 2; i*i <= num; i++)
for(int i = 2; i <= sqrt(num); i++)

 

 

728x90
반응형

댓글