일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- LANG
- 연결된 예외
- HTML
- 예외처리
- 디렉티브
- 형변환 연산자
- 알고리즘
- JSP
- jvm
- 클래스 패스
- 객체지향
- 재귀호출기본
- 암호론
- bubble-sort
- 객체
- java
- 2884
- BufferedWrite
- 공개키 암호
- OOP
- 백준 알고리즘
- 프로그래밍
- 현대암호
- 자동 형변환
- try&catch
- lang package
- 백준
- 자료구조
- class
- 소수판정
Archives
- Today
- Total
코드일기장
에라토스테네스의 체(Java) 본문
에라토스테네스의 체는 소수를 구하는 알고리즘으로 유명하다.
"소수가 되는 수의 배수를 지우면 남은 건 소수가 된다는 알고리즘이다."
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다.
- 소수가 되는 수의 배수를 지우면 남은 건 소수이다.
- 2로 예를 들면 자기 자신을 제외한 2의 배수를 지운다.
- 3도 2처럼 3 자기 자신을 제외한 3의 배수들을 지운다.
- 특정 숫자만큼 이 과정을 반복한다.
에라토스테네스의 소수 찾기를 다시 간단히 정리해서 설명하면
i=2 일 때, 2를 제외한 2의 배수는 모두 2로 나뉘니 소수가 아니다.
import java.io.*;
public class PrimeNumber {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
boolean[] primeNumberArr = new boolean[N + 1];
primeNumberArr = primeNumberChecked(primeNumberArr, N);
for (int i = 1; i <= N; i++) {
if (!primeNumberArr[i])
System.out.println(i);
}
}
static boolean[] primeNumberChecked(boolean[] b, int n) {
b[0] = true; // 소수면 false, 소수가 아니면 true
b[1] = true;
for (int i = 2; i < Math.sqrt(n); i++) {
if (!b[i]) {
for (int j = i * i; j <= n; j += i) { // 2를 예를 들면 2를 제외한 2의 배수는 2로 나뉘어지니 소수가 아님
b[j] = true;
}
}
}
return b;
}
}
boolean 배열을 이용한 에라토스테네스의 체
50
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
import java.util.Scanner;
public class PrimeNumber {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N + 1];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
arr[0] = 0;
arr[1] = 0;
for (int i = 2; i * i < arr.length; i++) {
if (arr[i] != 0) {
for (int j = i * i; j <= arr.length; j += i) {
arr[j] = 0;
}
}
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0)
System.out.println(arr[i]);
}
}
}
int형 배열을 이용한 에라토스테네스의 체
100
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
참고하면 좋은 자료
에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전
수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서
ko.wikipedia.org
커버사진
https://www.flaticon.com/kr/free-icon/algorithms_1753819
<a href="https://www.flaticon.com/kr/free-icons/" title="연산 아이콘">연산 아이콘 제작자: Flat Icons - Flaticon</a>
'컴퓨터 과학 > 알고리즘' 카테고리의 다른 글
유클리드 호제법(Java) (0) | 2022.04.11 |
---|---|
[배열 검색] 이진 검색 (0) | 2022.02.24 |
[배열 검색] 선형 검색, 보초법 (0) | 2022.01.28 |
Comments