์ํ์์ ์๋ผํ ์คํ
๋ค์ค์ ์ฒด๋ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ณ ๋ ๊ทธ๋ฆฌ์ค ์ํ์ ์๋ผํ ์คํ
๋ค์ค๊ฐ ๋ฐ๊ฒฌํ์๋ค.
์ฝ๋ฉ ์๊ณ ๋ฆฌ์ฆ์์ ์์๋ฅผ ๊ตฌํ ๋๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
์์๊ฐ ๋๋ ์์ ๋ฐฐ์๋ฅผ ์ง์ฐ๋ฉด ๋จ์ ๊ฑด ์์๊ฐ ๋๋ค๋ ์๊ณ ๋ฆฌ์ฆ
์๋๋ ์ํค๋ฐฑ๊ณผ์ ๋์จ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
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) ์
๋๋ค.