λ£¨νΈ nλ³΄λ€ μκ±°λ κ°μ μλ‘ λλμ΄ λ¨μ΄μ§λ©΄ μμκ° μλ!
bool prime(int n)
{
if (n < 2)
return false;
// i <= λ£¨νΈ nμ λͺ»νλ―λ‘.
// i * i < n
for (int i = 2; i * i <= n; ++i)
{
if (n % i == 0)
return false;
}
return true;
}
: μ½μκ° 1κ³Ό μκΈ°μμ λ°μ μλ μ , (1μ μ μΈνκ³ )
2 , 3 , 5 , 7 , 11 ,,,
4 , 6 , 8 , 9 λ μ½μκ° μκΈ° μμ λ§κ³ λ λ§μ.
for(int i = 2; i < n; ++i)
{
if(n % i == 0)
{
//μμ μλ.
}
}
-> μκ° λ³΅μ‘λ : o(n)
: μ μ΄λ¬ν μκ°μ νλ°λ©΄, μ«μλ₯Ό λ°μ λ‘ λλμμ λ κ·Έ κ°κΉμ§λ§ μ§ννλ©΄
μ§κΏμ κ°μ΄ λμ€κΈ° λλ¬Έ.
λ°μ μ΄μμ΄ κ°μΌλ‘ λλλ©΄ μ΄μ μ μ§νν λλ²λ λ°λμ λμ΄.
nμ΄ 27μ΄λΌκ³ ν λ
27μ΄ μμμΈμ§ μλμ§λ₯Ό νμΈν λ(μΌλ¨ μμΈμλ 1 3 9 27 ) μ΄κ³
1 μ΄λ 3κΉμ§λ§ μ§ννλ©΄ μ§ κΏμΈ 9μ 27μ κ΄ν΄μ μμΈμμΈμ§λ₯Ό μ ν μ§νν νμκ° μμ.
nμ΄ 23μ΄λΌκ³ νλ©΄ (μΌλ¨ μμΈμλ 1 23μ΄λ€. -> λ°λΌμ μμμ.)
: μμμ λ΄κ° μκ°νλλ‘ μ§ννλ©΄ 11κΉμ§λ§ μ§ννλ©΄ μ μ μμ.
n μ΄ 14λΌκ³ νλ©΄ (μΌλ¨ μμ μλ.)
7κΉμ§λ§ μ§ννλλΌλ λλμ΄μ§λκΉ μμκ° μλ.
for(int i = 2; i * 2 <= n; ++i)
{
if(n % i == 0)
-> μμ
}
μ μ΄λ°μκ°μ νλλ©΄, μ΄λ ν μμ κ΄ν΄μ μ κ³±κ·Όμ΄λ
μ κ³±κ·ΌλΌλ¦¬ κ³±νμ λ μλ μλ₯Ό ꡬν μ μλ€λ κ²μ.
-> μ κ³±κ·Ό λ³΄λ€ ν°κ°μ λ°λμ μ κ³±κ·Όλ³΄λ€ μμ κ°κ³Ό κ³±ν΄μΌλ§
μλ μλ₯Ό λ§λ€μ μμ. μλλ©΄ λ§λ€μ§λ λͺ»ν¨.
μ¦, μ κ³±κ·Όμ κΈ°μ€μΌλ‘ ν΄μ λμΉμ μ΄λ£¨κ³ μμμ μμ§ν΄μΌ ν¨.
16μ κ°μ§κ³ μκ°ν΄λ³΄λ©΄,
1 2 4 8 16 μ΄κ³ μ¬κΈ°μμ μ κ³±κ·ΌμΈ 4κΉμ§λ§ μ²λ¦¬νλ©΄ λλ€λ κ²μ.
κ·ΈλΌ 8μ μ΄λ―Έ 2μμ κ³μ°μ νκΈ° λλ¬Έμ μμμ 무 μ§νν νμκ° μμ.
-> μμ μλ₯Ό ν΅ν΄ λμΉμ λ§λλ μ κ³±κ·Όμ ν΅ν΄ μμ μ 무 νλ³μ΄ κ°λ₯ν¨.
if(n < 2) false;
for(int i = 2; i * i <= n; ++i)
{
if( n % i == 2)
{
//μμ μλ.
}
}