알고리즘 공부
[Algorithm] 소수 구하기 알고리즘 3 (에라토스테네스의 체)
isfp_yykkng
2023. 2. 16. 00:32
소수 판별 알고리즘 3 (에라토스테네스의 체)
알고리즘 목적
1부터 어떠한 수까지 중에 소수인지 아닌지를 판별하는 알고리즘
에라토스테네스의 체
: 소수를 구하는 대표적인 방법 중 하나로 k = 2 부터 √N 이하까지 반복하여 자연수들 중 k를 제외한 k의 배수를 제외시키는 방법
알고리즘 방법
- k = 2부터 (2부터 소수의 시작임.) √N 이하까지 반복 ( = 소수 판별 알고리즘 2)
- √N 이하까지 k를 제외한 k의 배수를 제외시키기!! ( 배수를 제외시킨다는 것은 그들은 약수가 있다는 것이기 때문에 소수가 아닌 것.)
- 나머지가 모두 소수임.
*시간복잡도 : N㏒N
실제 알고리즘 구현 (Java)
import java.util.Scanner;
public class Prime_3 {
public static boolean[] prime;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
make_prime(N);
for(int i = 0; i < prime.length; i++) {
if(prime[i] == false) { // 소수(false)일 경우 출력
System.out.println(i);
}
}
}
public static void make_prime(int N) {
prime = new boolean[N + 1]; // 0 ~ N
/*
소수가 아닌 index = true
소수인 index = false
*/
if(N < 2) {
return;
}
prime[0] = prime[1] = true;
for(int i = 2; i <= Math.sqrt(N); i++) {
// 이미 체크된 배열이면 다음 반복문으로 skip
if(prime[i] == true) {
continue;
}
// i 의 배수들 (j+i) 걸러주기 위한 반복문
for(int j = i * i; j < prime.length; j = j+i) {
prime[j] = true;
}
}
}
}