Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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
more
Archives
Today
Total
관리 메뉴

Development Log

[Algorithm] 에라토스테네스의 체 본문

Question/Algorithm

[Algorithm] 에라토스테네스의 체

gu-su 2022. 3. 21. 17:05

소수

  • 양의 약수를 두 개만 가지는 자연수를 의미한다.
  • 모든 수의 공통적으로 포함되는 양의 약수는 1이 존재하므로 1과 자기 자신만을 약수로 갖는 수를 의미한다. 
  • ex ) 2, 3, 5, 7, 9 ... 등

 

에라토스테네스의 체

  • 소수(Prime Number)를 판별해주는 알고리즘이다. 
  • 소수들대량으로 빠르고 정확하게 구하는 방법이다. 

 

원리

가장 먼저 소수를 판별할 범위만큼 배열을 할당하여 해당하는 값을 넣어주고 이후에 하나씩 지워나가는 방법을 이용한다. 소수가 되는 수의 배수를 지우면 남은 건은 소수만 된다. 

 

1. 배열을 생성하여 초기화한다. (2부터 소수를 구하고자 하는 구간의 모든 수를 나열)

2. 2부터 시작해서 자기 자신을 제외한 특정 배수를 모두 지운다.

더보기

1) 처음에 있는 자기 자신(2)을 제외한 2의 배수를 모두 지운다.

2) 남아있는 수 가운데 3은 소수이므로 제외한다.

3) 자기 자신(3)을 제외한 3의 배수를 모두 지운다.

4) 남아있는 수 가운데 5는 소수미으로 제외한다.

5) 자기 자신(5)을 제외한 5의 배수를 모두 지운다.

6) 위 과정을 반복한다. 

3. 2부터 시작하여 남아있는 수를 모두 출력한다. 

 

 

코드

[ 방법 1 ]

public class Eratos {
	
	static final int NUMBER = 100000;
	static int intArr[] = new int[NUMBER+1];
	static boolean booleanArr[] = new boolean[NUMBER+1];
	
	public static void main(String[] args) {
		
        // 1. 배열을 생성하여 초기화
		for(int i=2; i<=NUMBER; i++) {
			intArr[i] = i;
		}
		
        // 2. 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.
		for(int i=2; i<=NUMBER; i++) {
			if(intArr[i]==0) continue;
			
			for(int j=2*i; j<=NUMBER; j+=i) {
				intArr[j] = 0;
			}
		}
		
        // 3. 2부터 시작하여 남아있는 수를 모두 출력한다.
		for(int i=2; i<=NUMBER; i++) {
			if(intArr[i]!=0) System.out.println(intArr[i]); 
		}
		
	}
}

 

[ 방법 2 ]

 

public class Eratos {
	
	static final int NUMBER = 100000;
	static int intArr[] = new int[NUMBER+1];
	static boolean booleanArr[] = new boolean[NUMBER+1];
	
	public static void main(String[] args) {
		
		booleanArr[0] = booleanArr[1] = true; // 소수는 false, 1과 0 제외
		
		for(int i=2; i*i<=NUMBER; i++) {
			if(!booleanArr[i]) {
				for(int j=i*i; j<=NUMBER; j+=i) booleanArr[j] = true;
			}
		}
		
		for(int i=2; i<=NUMBER ; i++) {
			if(!booleanArr[i]) System.out.println(booleanArr[i]); 
		}
		
	}
}

 

 

 

 

 

 

[Algorithm] 에라토스테네스의 체

에라토스테네스의 체 란? 소수를 판별하는 알고리즘이다. 소수들을 대량으로 빠르고 정확하게 구하는 방법이다. 단일 숫자 소수 여부 확인 어떤 수의 소수의 여부를 확인 할 때는, 특정한 숫자

velog.io

 

 

[JAVA] 소수 구하는 알고리즘 : 에라토스테네스의 체

소수 구하는 알고리즘으로 유명한 에라토스테네스의 체입니다. 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법으로 코딩 알고리즘에서 소수를 구할 때도 이 방법을 사용

firework-ham.tistory.com