반응형
문제
자연수 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보다 작거나 같다.60 100 64 65
출력
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.
단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.620 61 -1
알고리즘 분류
수학(math), 정수론(number_theory), 소수 판정(primality_test), 에라토스테네스의 체(sieve)
소스코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int M = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
boolean[] nprime = new boolean[N + 1];
nprime[0] = true;
nprime[1] = true;
double sqrtmax = Math.sqrt(N);
int total = 0, min = N;
for (int i = 2; i <= sqrtmax; i++) {
for (int j = i + i; j <= N; j += i) {
if (nprime[j] == false)
nprime[j] = true;
}
}
for (int i = M; i <= N; i++) {
if (nprime[i] == false) {
total += i;
if (i < min) min = i;
}
}
if (total > 0) {
System.out.println(total);
System.out.println(min);
} else {
System.out.println(-1);
}
}
}
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
JAVA 백준 4948번 베르트랑 공준 (0) | 2022.06.10 |
---|---|
JAVA 백준 11653번 소인수분해 (0) | 2022.06.10 |
JAVA 백준 1978번 소수 찾기 (0) | 2022.06.08 |
JAVA 백준 1929번 소수 구하기 (0) | 2022.06.07 |
JAVA 백준 2839번 설탕 배달 (0) | 2022.06.07 |
댓글