Algorithm/알고리즘

[JAVA/알고리즘] 에라토스테네스의 체

gangintheremark 2023. 7. 18. 23:05
728x90

에라토스테네스의 체

소수를 판별하는 알고리즘으로 소수들을 대량으로 빠르고 정확하게 구하는 방법이다.

에라토스테네스의 체는 가장 먼저 소수를 판별할 범위를 배열에 할당하고, 하나씩 지워나간다.


1~n 까지의 소수를 구한다면

1. n+1 크기의 배열을 생성 후 2부터 n까지의 정수를 넣는다. 

2. 반복문을 돌며 배열 값이 0인 i는 건너뛴다.

3. i=2 부터 시작하여 i의 배수에 해당하는 수를 모두 0으로 바꿔준다.

 

💡 자연수 n이 입력되면 1부터 n까지의 소수 출력하는 프로그램 작성
import java.util.*;

class Main {
    public static void main(String[] args) {
        Main T = new Main();
        Scanner s = new Scanner(System.in);

        int n = s.nextInt();
        int[] ch = new int[n+1];

        // 1. 배열을 생성하여 값 초기화 
        for(int i = 2; i<=n;i++){
            ch[i] = i;
        }

        // 2. 2부터 시작하여 특정 수의 배수에 해당하는 수는 모두 0으로.
        for (int i = 2; i <= n ; i++) {
            if (ch[i] == 0) continue;  // 이미 0인 수는 건너뛴다

            for (int j = i+i; j <= n ; j+=i) {
                ch[j] = 0; // i의 배수는 0으로
            }
        }

        // 3. 2부터 시작하여 배열 값이 0이 아닌 수 출력 
        for (int i = 2; i <= n ; i++) {
            if(ch[i] != 0)
                System.out.print(ch[i] + " ");
        }
    }
}

단일 숫자 소수 여부 확인

    public boolean isPrime(int num) {
        if (num == 1) return false;
        for (int i = 2; i <= Math.sqrt(num); i++)
            if (num % i == 0)
                return false;
        return true;
    }

 

728x90