Jin's Dev Story

[브론즈 2] 2581번 소수 본문

Coding Test/백준[JAVA]

[브론즈 2] 2581번 소수

woojin._. 2023. 8. 28. 12:26

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

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

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

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

입력 1
60
100

출력 1
620
61

입력 2
64
65

출력 2
-1

코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		int m = scan.nextInt();
		int n = scan.nextInt();
		int sum = 0;
		int min = 10000;
		
		for(int i=m; i<=n; i++) {
			boolean check = true;
			if(i == 1) continue;
			
			for(int j=2; j<=Math.sqrt(i); j++) {
				if(i % j == 0) check = false;
			}
			
			if(check) {
				sum += i;
				if(min > i) min = i;
			}
		}
		
		if(min == 10000) System.out.println(-1);
		else {
			System.out.println(sum);
			System.out.println(min);
		}
	}
}