Algorithm/수학

Baekjoon2581 [Java] 소수 에라토스테네스의 체

한둥둥 2022. 10. 7. 11:36
import java.util.Scanner;

public class baekjoon2581 {
    static boolean checkArr[]= new boolean[10001];
    static int min = Integer.MAX_VALUE;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num1 = scan.nextInt();
        int num2 = scan.nextInt();
        scan.close();
        int answer  = soloCheck(num1,num2);
        System.out.println(answer);
        System.out.println(min);
    }
    static int soloCheck(int num1,int num2){
        int sum = 0;
        for(int i=2;i<checkArr.length-1;i++){
             for(int j =i*i;j<checkArr.length-1;j+=i){
                checkArr[j] = true;
             }           
        }
        for(int i=num1; i<=num2; i++){
           if(!checkArr[i]){
                min = Math.min(i,min);
                sum+=i;
           }
        }
        return sum; 
    }
}

우선적으로 checkArr이라는 소수 판별 배열을 만들어 주었다. 

그러면 soloCheck 배열에서 소수인지 아닌지 for문을 통해서 구한 후에 checkArr배열에 넣어주었다. 

그러고 나서 아래에서 내가 입력 값으로 받은것을 판별할 수 있게 for문을 통해서 반복문을 만들어주었으며 이를 통해 

if문에서 false인 아이들은 소수이기 때문에 최소값과 sum 값을 구해주었음. 

최소값을 구하는건 마음에 엄청들지는 않지만 일단 이정도로만 해둠.. 

에라토스테네스의 체를 까먹어서 구글에서 한번 찾아보고... 풀었음.