Skip to content

Commit da3d4e2

Browse files
authored
Create note.md
1 parent 2bb32cd commit da3d4e2

File tree

1 file changed

+81
-0
lines changed
  • 소수판별-에라토스테네스의 체

1 file changed

+81
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
```
2+
package algo;
3+
4+
5+
/**
6+
* 에라토스테네스의 체 - 소수 판별
7+
* 1과 자기자신만을 약수로 갖는 수를 찾아라
8+
* 생각 -
9+
* ex) 8이 소수인지 판별할때 사실 (int)8의 제곱근까지만 검사해보면된다
10+
* 왜냐하면 8 = 2*4 =2*2*2 / 6 = 2*3 / ==> 결국 3,4까지 확인할 필요도 없이 2로 나눴을 때 나머지가 생기느냐 여부로 확인하면된다
11+
* 예를들어 27이라면 27의 (int)sqrt(27) = 5
12+
* 27 = 3*9 = 3*3*3 3의 배수까지 거칠필요없이 3으로만 확인할 수 있으면 된다.
13+
*
14+
*
15+
* (int)sqrt(8) = 2이고 2부터 2까지 = 2
16+
* 2로 8을 나눴을 때 나머지가 0이 아니라면 소수
17+
*
18+
* 만약 11이라면 (int)sqrt(11) = 3
19+
* 2~3
20+
* 11%2 == 0
21+
* 11%3 == 0
22+
* 은 모두 거짓이니 소수
23+
*
24+
* ---------------------
25+
*
26+
* 그런데 하나의 수가 소수인지 판별이 아니라
27+
* 대량의 소수를 한 번에 판별하고자 할 때 = 에라토스테네스의 체
28+
* 1. 1~25까지 있다고 했을 때 배열을 만든다.
29+
* 2. 2부터 시작하는데 자기 자신은 지우지 않고 2의 배수를 모두 지운다
30+
* 3. 3도 동일
31+
* --> 결국 이 배수를 모두 지운다는 것을 통해 소수만 남긴다
32+
* */
33+
public class Main {
34+
35+
// 하나의 수가 소수인지 판별
36+
static boolean isPrimeNum(int x) {
37+
int end = (int) Math.sqrt(x);
38+
System.out.println(end);
39+
for (int i = 2; i <= end; i++) {
40+
if (x % i == 0) {
41+
return false;
42+
}
43+
}
44+
return true;
45+
}
46+
47+
static int[] array = new int[26];
48+
// 에라토스테네스의 체
49+
static void primeNums() {
50+
for (int i = 1; i <= 25; i++) {
51+
array[i] = i;
52+
}
53+
54+
for (int i = 2; i <= 25; i++) {
55+
if (array[i] == 0) { // 0은 지워졌다는 의미
56+
continue;
57+
}
58+
59+
for (int j = i + i; j <= 25; j = j + i) {
60+
// 만약 i=2라면 2 자기자신 빼고 2의 배수를 다 지우는 것
61+
array[j] = 0;
62+
}
63+
}
64+
65+
for (int i = 1; i <= 25; i++) {
66+
if (array[i] != 0) {
67+
System.out.println(array[i]);
68+
}
69+
}
70+
}
71+
public static void main(String[] args) {
72+
//System.out.println(isPrimeNum(7));
73+
primeNums();
74+
75+
}
76+
77+
78+
}
79+
80+
81+
```

0 commit comments

Comments
 (0)