Study/Problem Solving

[BOJ_2581] 소수

monitor 2023. 9. 19. 23:58

단순히 소수를 구하고 이에 따라서 해당 범위의 최솟값과 소수들의 합을 구하는 문제이다.

 

소수 판별법이 잘 기억이 나지 않아 제곱근까지의 숫자들을 모두 검증하는식으로 풀었다.

 

package Math;
import java.util.*;
import java.io.*;
public class BOJ_2581 {
    static int min = Integer.MAX_VALUE;
    static int ans = 0;
    public static void main(String[] args) throws Exception{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tk = new StringTokenizer(in.readLine()," ");
        int M = Integer.parseInt(tk.nextToken());
        int N = Integer.parseInt(in.readLine());
        
        find(M,N);

        if(ans == 0){
            System.out.println(-1);
        }else {
            System.out.println(ans + "\n" + min);
        }
    }

    private static void find(int m, int n) {
        for(int i = m; i <= n; i++){
            boolean checker = check(i);
            if(i == 2 || i == 3){
                min = Math.min(min,i);
            }

            if(checker){
                continue;
            } else {
                min = Math.min(min,i);
                ans += i;
            }
        }
    }

    private static boolean check(int n) {
        if(n == 1){
            return true;
        }

        for(int i = 2; i*i <= n; i++){
            if(n%i == 0){
                return true;
            }
        }
        return false;
    }
}

 

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net