소수 판별(에라토스테네스 체)

최준호·2021년 8월 5일
0

알고리즘 강의

목록 보기
12/79

설명

자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.

만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다.

코드

public class PrimeNumber {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int input = in.nextInt();
        solution(input);
    }

    public static void solution(int input){
        int[] arr = new int[input+1];   //배열을 검사할때 배열과 index값을 맞추기 위해
        int count = 0;
        for(int i=2; i<=input; i++){
            if(arr[i]==0){  //arr[i] == 0일 경우 해당 index는 소수이므로 카운트
                count++;
                for(int j=i; j<=input; j+=i){  //해당 수의 배수들은 모두 체크
                    arr[j] = 1;
                }
            }
        }
        System.out.println(count);
    }
}

지금까지 소수를 구하면서 수 많은 에라토스테네스 체를 구현하는 코드를 봐왔지만 나는 이게 가장 쉽게 느껴지고 가독성도 가장 좋은 코드인거 같다.

에라토스테네스 체로 푸는 문제는 해당 알고리즘을 기억하고 풀자!

참고!
소수 : 에라토스테네스 체
최대 공약수 : 유클리드 호제법

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글