아래 코드는 기본적인 소수의 정의를 이용하여 구혔하였으나, 2 ~ (n-1) 까지 모두 확인이 필요하여 비효율적이다.
- 시간 복잡도 : O(n)

#include <iostream>
#include <string>
using namespace std;

bool isPrime(int n) {
    int i;

    for (i = 2; i < n; ++i) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}

void main()
{
    int num;
    cin >> num;

    string answer = isPrime(num) == true ? "true" : "false";
    cout << "is Prime? - " << answer << endl;
}



소수를 구하기 위해서는 제곱근까지만 확인해보면 되기 때문에 아래와 같이 수정하여 개선할 수 있다.

- 시간 복잡도 : O(logn)


bool isPrime(int n) {
    int i;
    int sqrn = (int)sqrt(n);

    for (i = 2; i < sqrn; ++i) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}


'SW > 알고리즘' 카테고리의 다른 글

Tree Traversal1 - Preorder Traversal  (0) 2019.02.23
Right Hand Rule  (0) 2018.12.30
Eratosthenes's Sieve  (0) 2018.12.30
Asymptotic Analysis  (0) 2018.12.23
Eucild's Algorithm  (0) 2018.12.23

+ Recent posts