개념
어떤 수 n이 소수인지 아닌지를 효율적으로 판별할 수 있는 방법이다.
100을 구하는 방법으로는
- 1 * 100
- 2 * 50
- 4 * 25
- 5 * 20
- 10 * 10
- 20 * 5
- 25 * 4
- 50 * 2
- 100 * 1
이 있다.
(√100 이하의 수) * ( √100 이상의 수 )로 100을 구할 수 있는 것을 알 수 있다.
이 방법을 이용하면
n을 √n이하의 수로 나누고 만약 모든 수에서 나누어지지 않는다면 n은 소수, 아니면 n은 소수가 아닌 것을 알 수 있다.
시간복잡도는 O(sqrt(n))이다.
구현
bool IsPrime(int n)
{
if(n <= 1)
return false;
if(n <= 3)
return true;
for(int i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
return false;
}
return true;
}
'자료구조, 알고리즘 > 개념' 카테고리의 다른 글
[알고리즘] 백트래킹 (0) | 2024.02.28 |
---|---|
[알고리즘] 에라토스테네스의 체 (0) | 2024.02.05 |
[알고리즘] 유킬리드 호제법 (0) | 2024.02.04 |
[알고리즘] O(nlogn) 정렬 (0) | 2023.11.07 |
[알고리즘] 시간복잡도 (0) | 2023.11.06 |