🧠 μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 (Sieve of Eratosthenes)

no-glass-otackuΒ·2025λ…„ 4μ›” 3일
0

🧠 μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 (Sieve of Eratosthenes) 간단 정리
μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ μ²΄λŠ” N μ΄ν•˜μ˜ λͺ¨λ“  μ†Œμˆ˜λ₯Ό λΉ λ₯΄κ²Œ κ΅¬ν•˜λŠ” λŒ€ν‘œμ μΈ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
μ†Œμˆ˜κ°€ μ•„λ‹Œ 수(ν•©μ„±μˆ˜)λ₯Ό μ§€μ›Œλ‚˜κ°€λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λ©°, μ‹œκ°„ λ³΅μž‘λ„κ°€ 맀우 νš¨μœ¨μ μ΄λ‹€.

βœ… 핡심 아이디어

  • 2λΆ€ν„° NκΉŒμ§€ λͺ¨λ“  수λ₯Ό μ†Œμˆ˜λΌκ³  κ°€μ •ν•œλ‹€.

  • ν˜„μž¬ 수의 λ°°μˆ˜λ“€μ„ λͺ¨λ‘ μ œκ±°ν•œλ‹€.

  • 남은 μˆ˜λ“€μ€ μ „λΆ€ μ†Œμˆ˜λ‹€!

πŸ”§ κ΅¬ν˜„ 핡심 μ½”λ“œ (Java)

boolean[] isPrime = new boolean[N + 1];
Arrays.fill(isPrime, true);

isPrime[0] = false;
isPrime[1] = false;

for (int i = 2; i * i <= N; i++) {
    if (isPrime[i]) {
        for (int j = i * i; j <= N; j += i) {
            isPrime[j] = false;
        }
    }
}

πŸ“Œ μ„€λͺ…
isPrime[i] == true β†’ iλŠ” μ†Œμˆ˜

i * i <= NκΉŒμ§€λ§Œ 검사해도 μΆ©λΆ„

j = i * iλΆ€ν„° μ‹œμž‘ β†’ 이미 μ§€μ›Œμ§„ 수 쀑볡 제거

🧾 μš”μ•½
ν•­λͺ© μ„€λͺ…
μ‹œκ°„ λ³΅μž‘λ„ O(N log log N)
곡간 λ³΅μž‘λ„ O(N) (boolean λ°°μ—΄)
ν™œμš© μ˜ˆμ‹œ μ†Œμˆ˜ νŒλ³„, λ²”μœ„ λ‚΄ μ†Œμˆ˜ κ΅¬ν•˜κΈ°, λ°±μ€€ 1929번 λ“±

profile
Move forward

0개의 λŒ“κΈ€