์๋ ํ์ธ์, ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฆฌํ๋ ํฌ์คํ ์ ๋๋ค. ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ๊ณ ํ์๋ ค๋ฉด ํด๋น ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ด์ฉํด์ฃผ์ธ์. ๐
์์ ๋?
1์ ์ ์ธํ ์๋ค ์ค, ๊ทธ ์์ ์ฝ์๊ฐ 1 ๊ณผ ์๊ธฐ ์์ ์ผ๋ก๋ง ์ด๋ฃจ์ด์ง ์๋ฅผ ๋งํ๋ค.
ex) 2, 3, 5, 7, 11, 13 ......
์์๋ฅผ ์ฐพ์๋ณด์
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
์ด ์ค์์ ์์์ธ 2, 3์ ์ด์ฉํด์ 2์ 3์ ๋ฐฐ์๋ค์ ์ฐจ๋ก๋ก ๋ค ์ง์ ๋ณด๊ฒ ๋ค.
1 | 2 | 3 | 5 | |
7 | ||||
11 | 13 | |||
17 | 19 |
๊ทธ๋ฌ๋ฉด ๋จ๋ ์๋ ์์๊ฐ ๋๋ค. [2, 3, 5, 7, 11, 13, 17, 19 ...]
์ฝ๋๋ก ์ฎ๊ฒจ๋ณด์
// ์์ ์ฐพ๊ธฐ
int number = 20;
int[] num_arr = new int[number];
// 0๋ถํฐ 20๊น์ง ๋ฐฐ์ด์ ๋ฃ๋ ์ฝ๋ ์๋ต.
for(int i=2; i <= number; i++){
if(num_arr[j] == 0) continue;
for(int j=i+i; j <= number; j += i){
num_arr[j] = 0;
}
}
์ผ๋จ 2์ค for๋ฌธ์ ์ด์ฉํ์ฌ, ๋ฐ๊นฅ for๋ฌธ์ i๋ 2๋ถํฐ ์์ํ๊ณ ์์ชฝ for๋ฌธ์ 2์ ๋ฐฐ์๋ง ์ฐพ์์ 0์ ๋ฃ์ด์ค๋ค. (๊ทธ๋ ๋ค๋ฉด ํด๋น ์์ ํด๋นํ๋ ๋ฐฐ์ด์ ๊ฐ์ด 0 ์ด๋ฉด ์์๊ฐ ์๋ ๊ฒ์ด๋ค.) ๊ทธ๋ ๊ฒ 2๋ถํฐ 20๊น์ง ์ญ ๋ฐ๋ณตํ๋ค. ์ค๋ณต ์ฒดํฌ๋ฅผ ํผํ๊ธฐ ์ํด ๋ฐฐ์ด์ ๊ฐ์ด ์ด๋ฏธ 0์ธ ๊ฒฝ์ฐ๋ ๊ฑด๋๋ฐ๋๋ก ํ๋ค.
์ด๊ฒ ๋ฐ๋ก ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์ด๋ค.
์์์ธ์ง ํ๋ณํ๊ธฐ
// num_arr[i] != 0 ์ด๋ฉด ์์์ด๋ค!
for(int i=2; i< num_arr[i]; i++){
if(num_arr[i] != 0)
System.out.println( num_arr[i] + " ");
}
์ด๋ฏธ ๊ตฌํด๋์ ๋ฐฐ์ด์ ์ํํ๋ฉด์, num_arr[i] ๊ฐ์ด 0์ด ์๋๋๋ง ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
+ ๋ฐฐ์ด ์์ด ์์ ํ๋ณํ๋ ์ฝ๋
public Boolean isPrimeNumber(int num) {
int sqrt = (int)Math.sqrt(num); // ์ ๊ณฑ๊ทผ๊น์ง๋ง ์ฒดํฌ(์๊ฐ๋ณต์ก๋ ์ค์ด๊ธฐ)
for (int i = 2; i <= sqrt; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด์ ์ฃผ์ด์ง ์์ ์ ๊ณฑ๊ทผ ๊น์ง๋ง ์ํ๋ฅผ ํ๋ฉด์, num์ ํ๋ฒ์ด๋ผ๋ ๋๋์ด ์ง๋ค๋ฉด ๊ทธ ์๋ ์์๊ฐ ์๋ ๊ฒ์ด๋ค.