Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- 11053
- Java #백준 #코딩테스트
- 24479
- sequelize
- node
- 2447
- 카카오 클라우드 스쿨
- 11054
- boj
- 알고리즘
- Spring #Java #Spring Boot
- Spring #Spring Boot #Java
- 9020
- 1110
- kakaocloud
- 7568
- Spring #Java #Spring Boot #@BeforeEach #@AfterEach
- Java #코딩테스트
- kakaocloudschool
- 15552
- SpringTokenizer
- Java #오븐시계 #백준
- 카카오클라우드스쿨
- java
- Spring #Java #Spring Boot #싱글톤
- Spring
- 코딩테스트
- python
- 백준
Archives
- Today
- Total
YoungSoo
에라토스테네스의 체 본문
에라토스테네스의 체란 소수를 찾는 방법을 말한다.
에라토스테네스의 체의 원리
1. 2보다 큰 소수를 구하고자 하는 구간의 모든 수를 나열한다.
2. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색)
3. 자기 자신을 제외한 2의 배수를 모두 지운다.
4. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색)
5. 자기 자신을 제외한 3의 배수를 모두 지운다.
6. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색)
7. 자기 자신을 제외한 5의 배수를 모두 지운다.
8. 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색)
9. 자기 자신을 제외한 7의 배수를 모두 지운다.
10. 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.
에라토스테네스의 체의 JAVA 구현
public class Eratos {
public static void main(String[] args) {
// ArrayList로 구현
ArrayList<Boolean> primeList;
// 사용자로부터의 콘솔 입력
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
// n <= 1 일 때 종료
if(n <= 1) return;
// n+1만큼 할당
primeList = new ArrayList<Boolean>(n+1);
// 0번째와 1번째를 소수 아님으로 처리
primeList.add(false);
primeList.add(false);
// 2~ n까지 소수로 설정
for(int i=2; i<=n; i++ )
primeList.add(i, true);
// 2부터 ~ i*i <= n
// 각각의 배수들을 지워간다.
for(int i=2; (i*i)<=n; i++){
if(primeList.get(i)){
for(int j = i*i; j<=n; j+=i) primeList.set(j, false);
//i*i 미만은 이미 처리되었으므로 j의 시작값은 i*i로 최적화할 수 있다.
}
}
StringBuffer sb = new StringBuffer();
sb.append("{");
for(int i=0; i<=n; i++){
if(primeList.get(i) == true){
sb.append(i);
sb.append(",");
}
}
sb.setCharAt(sb.length()-1, '}');
System.out.println(sb.toString());
}
}
소수를 판별하는 알고리즘은 여러 가지가 있지만 이 방법이 제일 빠르다
'코딩테스트' 카테고리의 다른 글
백준 - 수 정렬하기2(JAVA 풀이) (0) | 2022.07.27 |
---|---|
백준 - 소수 구하기(JAVA 풀이) (0) | 2022.07.26 |
백준 - 단어공부(JAVA 풀이) (0) | 2022.07.25 |
백준 - 평균(JAVA 풀이) (0) | 2022.07.24 |
백준 - 단어의 개수(JAVA 풀이) (0) | 2022.07.22 |