알고리즘/수학

[백준 2581] - [수학] - 소수

팡스 2018. 11. 27. 12:51

문제 링크 : https://www.acmicpc.net/problem/2581



이 문제는 소수이 먼저 확인하고 소수인 수를 합하고 최소값만 구하면 되는 문제이다. 


입력받는 수의 최대값은 10000 이기 때문에 int 타입으로 처리가 가능하고 int 타입의 최대 수를 MIN 값으로 초기화 한 뒤에 풀면


소수일경우 최소값을 판단하는데 쉽게 판단 할 수 있다. 

그리고 마지막에 결과를 반환할때 최소값의 값이 아직 int의 최대값이면 소수가 발견되지 않은거기 때문데 -1을 출력하면 된다.


소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int startNum = Integer.parseInt(br.readLine());
        int endNum = Integer.parseInt(br.readLine());
        
        int SUM = 0;
        int MIN = Integer.MAX_VALUE;
        
        for(int i = startNum; i <= endNum; i++) {
            if(isPrimeNumber(i)) {
                MIN = Math.min(MIN, i);
                SUM += i;
            }
        }
        
        if(MIN == Integer.MAX_VALUE) System.out.println(-1);
        else {
            System.out.println(SUM);
            System.out.println(MIN);
        }
    }
    
    public static boolean isPrimeNumber(int N) {
        if(N == 1return false;
        
        for(int i=2; i < N; i++) {
            if(N % i == 0return false;
        }
        return true;
    }
}
 
cs