1. 소수 여부 판별 개념
https://smallpants.tistory.com/161
2. C++ style Code
1) 숫자 N 1개만 소수인지 판별하면 될때는 2부터 sqrt(N)까지 나눠본다.
bool is_primenumber(int n)
{
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
2) 소수인지 판별해야 할 수가 여러개라면 for문을 쓸데없이 여러번 반복할 필요가 없다.
메모이제이션을 사용하는 에라토스테네스의 체 알고리즘을 사용한다.
std::vector<bool> primenumber_table;
void makePrimeNumberTable(int max) // 에라토스테네스의 체
{
primenumber_table.resize(max + 1, true);
primenumber_table[0] = false;
primenumber_table[1] = false;
for (int i = 2; i <= sqrt(max); i++) {
if (primenumber_table[i]) {
for (int j = 2 * i; j <= max; j += i) {
primenumber_table[j] = false;
}
}
}
}