์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Sieve of Eratosthenes) ์๊ณ ๋ฆฌ์ฆ :
๊ณ ๋ ๊ทธ๋ฆฌ์ค ์ํ์ ์๋ผํ ์คํ ๋ค์ค๊ฐ ๋ฐ๊ฒฌํ ๋ฐฉ๋ฒ์ผ๋ก ์์๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
์ฒด๋ก ์น๋ฏ์ด ์ซ์๋ฅผ ๊ฑธ๋ฌ๋ด๋ ๋ฐฉ์. ์์์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ฐ๋ฉด ๋๋จธ์ง๋ ์์๊ฐ ๋๋ค
ex ) 2 ~ 120 ์ฌ์ด์ ์์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
1. 2๋ถํฐ ์์๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ ๊ตฌ๊ฐ์ ๋ชจ๋ ์๋ฅผ ๋์ดํ๋ค. ๊ทธ๋ฆผ์์ ํ์ ์ฌ๊ฐํ์ผ๋ก ๋๋ฅธ ์๋ค์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค.
2. 2๋ ์์์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ์ 2๋ฅผ ์ด๋ค. (๋นจ๊ฐ์)
3. ์๊ธฐ ์์ ์ ์ ์ธํ 2์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
4. ๋จ์์๋ ์ ๊ฐ์ด๋ฐ 3์ ์์์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ์ 3์ ์ด๋ค. (์ด๋ก์)
5. ์๊ธฐ ์์ ์ ์ ์ธํ 3์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
6. ๋จ์์๋ ์ ๊ฐ์ด๋ฐ 5๋ ์์์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ์ 5๋ฅผ ์ด๋ค. (ํ๋์)
7. ์๊ธฐ ์์ ์ ์ ์ธํ 5์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
8. ๋จ์์๋ ์ ๊ฐ์ด๋ฐ 7์ ์์์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ์ 7์ ์ด๋ค. (๋
ธ๋์)
9. ์๊ธฐ ์์ ์ ์ ์ธํ 7์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์ด๋ค.
10. ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๊ตฌํ๋ ๊ตฌ๊ฐ์ ๋ชจ๋ ์์๊ฐ ๋จ๋๋ค.
๊ทธ๋ฆผ์ ๊ฒฝ์ฐ, 11^2>120 ์ด๋ฏ๋ก 11๋ณด๋ค ์์ ์์ ๋ฐฐ์๋ค๋ง ์ง์๋ ์ถฉ๋ถํ๋ค.
์ฆ, 120๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ฐ์ด๋ฐ 2, 3, 5, 7์ ๋ฐฐ์๋ฅผ ์ง์ฐ๊ณ ๋จ๋ ์๋ ๋ชจ๋ ์์์ด๋ค.
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ๋๋์ ์ซ์๋ค์ ์์ ํ๋ณํ ๋๋ ๋งค์ฐ ํจ์จ์ ์ด์ง๋ง
ํน์ ์ซ์์ ๋ํ ์์ ํ๋ณ์๋ ๋นํจ์จ์ ์ด๋ค.
๋ฉ์๋ eratosthenes() : 2~ num ๊น์ง์ ์๋ฅผ ์์ ํ๋ณ
๋งค๊ฐ๋ณ์ : int num
๋ฐํ๊ฐ : num+1 ํฌ๊ธฐ์ ๋ฐฐ์ด ์์ ์ธ๋ฑ์ค๊ฐ ์์์ผ ๊ฒฝ์ฐ true, ์์๊ฐ ์๋ ๊ฒฝ์ฐ false๋ฅผ ๋ด์ ๋ฐํ
boolean[] eratosthenes(int num) {
boolean[] prime = new boolean[num+1];
prime[0] = prime[1] = false;
for(int i = 2; i <= num; i++) {
prime[i] = true;
}
for(int i = 2; i*i <= num; i++) {
for(int j = 2 * i; j <= num; j += i) {
prime[j] = false;
}
}
return prime;
}
์๋ผํ ์คํ ๋ค์ค์ ์ฒด Sieve of Eratosthenes : O(Nlog(logN))