백준 알고리즘 9단계 기본 수학2 2581번 문제입니다.
Q. 자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.
[입력]
- 첫째 줄에 M이, 둘째 줄에 N이 주어진다.
[조건]
- M과 N은 10000이하의 자연수이며, M은 N보다 작거나 같다.
- M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.
- M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
풀이
이전 문제(1978번)의 연장선으로 이전 문제가 테스트 개수만큼 입력받은 수의 소수를 구했다면 이 문제는 입력받은 M, N 사이의 소수를 구해야했다.
소수를 구하는 방식은 동일하게 사용하고 조건을 구하는 식만 추가했다.
소스
package com.baek.algo.step09;
import java.util.Scanner;
public class Q2581 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int min = n;
int sum = 0;
for(int i = m; i <= n; i++) {
boolean pNum = true;
if(i > 1) {
for(int j = 2; j < i; j++) {
if(i % j == 0) {
pNum = false;
break;
}
}
if(pNum == true) {
sum = sum + i;
min = i < min ? i : min;
}
}
}
if(sum == 0) {
System.out.println(-1);
} else {
System.out.println(sum);
System.out.println(min);
}
sc.close();
}
}