Skip to content

Latest commit

ย 

History

History
57 lines (38 loc) ยท 1.83 KB

Sieve_of_Eratosthenes.md

File metadata and controls

57 lines (38 loc) ยท 1.83 KB

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด (sieve of Eratosthenes)

์ˆ˜ํ•™์—์„œ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 
๊ณ ๋Œ€ ๊ทธ๋ฆฌ์Šค ์ˆ˜ํ•™์ž ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค๊ฐ€ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค.
์ฝ”๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ๋„ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



โ— ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์ดํ•ดํ•˜๊ธฐ

์†Œ์ˆ˜๊ฐ€ ๋˜๋Š” ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ง€์šฐ๋ฉด ๋‚จ์€ ๊ฑด ์†Œ์ˆ˜๊ฐ€ ๋œ๋‹ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•„๋ž˜๋Š” ์œ„ํ‚ค๋ฐฑ๊ณผ์— ๋‚˜์˜จ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.



์ฝ”๋“œ ๋ฐ ํ•ด์„ค

import java.io.*;

public class Algorithm {

    static boolean[] isPrime;
    
    static void isPrime(int n){ 
        isPrime = new boolean[n+1]; // N๋ฒˆ์งธ์˜ ์ˆ˜ ๊นŒ์ง€ ๋ฐ›๊ธฐ์œ„ํ•ด N+1๊นŒ์ง€ ๋™์ ํ• ๋‹น
        
        for(int i = 0; i < isPrime.length; i++){
            isPrime[i] = true; // boolean๋ฐฐ์—ด์˜ default๊ฐ’์€ false์ด๋ฏ€๋กœ true๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
        }
        
        isPrime[0] = isPrime[1] = false; // 0๊ณผ 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ˆ๊น false
        
        for(int i = 2; i <= Math.sqrt(n); i++){ // 2๋ถ€ํ„ฐ n์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜๋ฅผ ํ™•์ธ
            if(isPrime[i]){ // ํ•ด๋‹น์ˆ˜๊ฐ€ ์†Œ์ˆ˜๋ผ๋ฉด, ํ•ด๋‹น์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ฐฐ์ˆ˜๋“ค์„ ๋ชจ๋‘ false ์ฒ˜๋ฆฌํ•˜๊ธฐ
                for(int j = i*i; j<= n; j += i){//๊ทธ ์ดํ•˜์˜ ์ˆ˜๋Š” ๋ชจ๋‘ ๊ฒ€์‚ฌํ–ˆ์œผ๋ฏ€๋กœ i*i๋ถ€ํ„ฐ ์‹œ์ž‘
                    isPrime[j] = false;
                }
            }
        }
    } // isPrime ํ•จ์ˆ˜ ์ข…๋ฃŒ  // ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n loglogn) ์ž…๋‹ˆ๋‹ค.

reference