알고리즘

[백준, 자바, 2581번] 소수

hminor 2024. 11. 13. 15:29
반응형

풀이

  • 이전 소수 찾기 문제를 통해 알게 된
  • 에라토스테네스의 체를 활용하여 해결
  • 우선 값이 더 큰  N을 기준으로 boolean 배열을 만들고
  • 2부터 배수가 되는 인덱스에 값을 true로 변경하고
  • 이후 범위를 M과 N 사이에 해당 하는 값을 조건에 따라처리하여 해결

 

import java.util.Scanner;

public class _2581 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int M = sc.nextInt();
        int N = sc.nextInt();
        boolean[] li = new boolean[N+1];
        li[1] = true;
        for (int i=2; i<N; i++) {
            for (int j=i*2; j<=N; j+=i) {
                if (!li[j]) li[j] = true;
            }
        }

        int mn = 0;
        int hap = 0;
        for (int i=M; i<=N; i++) {
            if (!li[i]) {
                if (mn==0) mn = i;
                hap+=i;
            }
        }
        if (hap==0) System.out.println(-1);
        else {
            System.out.println(hap);
            System.out.println(mn);
        }
    }
}