[μκ³ λ¦¬μ¦] μλΌν μ€ν λ€μ€μ 체
μλΌν μ€ν λ€μ€μ 체λ?
μλΌν μ€ν λ€μ€μ 체λ κ°μ₯ λνμ μΈ *μμ(Prime Number) νλ³ μκ³ λ¦¬μ¦μΌλ‘, μμλ₯Ό λλμΌλ‘ λΉ λ₯΄κ³ μ ννκ² κ΅¬νλ λ°©λ²μ λλ€.
*μμ : μμ μ½μλ₯Ό λκ°(1κ³Ό μμ )λ§ κ°μ§λ μμ°μ
μΌλ°μ μΌλ‘ ν¨μ¨μ μΈ μμ νλ³ μκ³ λ¦¬μ¦
const arr = [];
for(let i=2;i<=10;i++) {
let find = true;
for(let j=2;j<=Math.sqrt(i);j++) {
if(i%j == 0) {
find = false;
break;
}
}
if(find) {
arr.push(i);
}
}
console.log(arr); // [2, 3, 5, 7]
κ°μ₯ μκ°νκΈ° μ¬μ΄ Nμ μμ νλ³ μκ³ λ¦¬μ¦μ 2 ~ N-1κΉμ§μ μ«μ μ€μμ λλμ΄ λ¨μ΄μ§λ μκ° μμλ μμλΌκ³ νλ³ ν μ μμ§λ§, Nμ μ½μλ 무쑰건 √Nλ²μ μμ μ‘΄μ¬νκΈ° λλ¬Έμ √NκΉμ§ νμΈνμ λ O(√N)μΌλ‘ μ‘°κΈ ν¨μ¨μ μΌλ‘ μμλ₯Ό ꡬν μ μμ΅λλ€. λ°λΌμ 1κ°μ μ«μμ λν΄ μμλ₯Ό ꡬν λ μ£Όλ‘ μ¬μ©λ©λλ€.
μλΌν μ€ν 체λ€μ€μ 체 μκ³ λ¦¬μ¦
μμλ₯Ό λλμΌλ‘ λΉ λ₯΄κ³ μ ννκ² κ΅¬νκΈ° μν΄μλ μλΌν μ€ν 체λ€μ€μ 체 μκ³ λ¦¬μ¦μ μ¬μ©νλ κ²μ΄ κ°μ₯ ν¨μ¨μ μ λλ€.
const arr = [];
const check = Array(10+1).fill(true);
let m = Math.floor(Math.sqrt(10));
//i = 2 λΆν° iμ λ°°μλ₯Ό λͺ¨λ trueλ‘ μ§μλλ€.
//μ΄λ, μ΄λ―Έ μ§μμ§ μ«μλ continueν©λλ€.
for(let i = 2; i <= m; i++){
if(check[i]){
arr.push(i);
let temp = i+i;
while(temp < check.length){
check[temp] = false;
temp += i;
}
}
}
for(let i = m+1; i < check.length; i++){
if(check[i]) arr.push(i);
}
console.log(arr); // [2, 3, 5, 7]
μλΌν μ€ν 체λ€μ€μ 체λ κ°μ₯ λ¨Όμ μμλ₯Ό λ°λ³ν λ²μλ§νΌ λ°°μ΄μ ν λΉνκ³ κ·Έ μΈλ±μ€μ trueκ°μ λ£μ΄μ€λλ€.
λ€μμΌλ‘, 2 ~ √N κΉμ§ μμ μ μ μΈν κ° μ«μμ λ°°μλ€μ μΈλ±μ€μ ν΄λΉνλ λ°°μ΄κ°μ falseλ‘ μ μΈμν΅λλ€. μ΄λ, κ° μ«μμ λ°°μλ€μ μ μΈμν€ μ μ μ΄λ―Έ falseκ°μ΄λΌλ©΄ ν΄λΉ μμ λ°°μλ€μ μ΄λ―Έ μ κ±°λμΌλ―λ‘ κ±΄λλλλ€.
μλ₯Ό λ€μ΄, Nμ΄ 10μΈ κ²½μ° Math.sqrt(10) = 3.1622776601683795 μ΄λ―λ‘ 2, 3, 4μ λ°°μλ€μ μ μΈμν΅λλ€.
1) 2μ λ°°μλ₯Ό μ κ±°
true (i=2) | true | false | true | false | true | false | true | false (i=10) |
2) 3μ λ°°μλ₯Ό μ κ±°
true | true | false | true | false | true | false | false | false |
λ°λΌμ, λ°°μ΄μμ trueμΈ indexλ€λ§ λ½μλΈλ€λ©΄ 2, 3, 5, 7 μ΄ λκ³ μκ° λ³΅μ‘λλ O(N^(1/2))λ‘ κ³μ°μ΄ κ°λ₯ν©λλ€.
[μ°Έκ³ ]