소수
23 June 2019
문제 : https://www.acmicpc.net/problem/2581
이번은 일정 범위 내에서 소수를 구하는 문제를 풀어보도록 하겠습니다.
import java.util.Scanner;
public class Main {
private static int[] primeNumbers = new int[10001];
public static void main(String args[]) {
primeNumbers[1] = 1;
for (int i = 2; i < primeNumbers.length - 1; i++) {
int k = 2;
while (true) {
if (k * i > primeNumbers.length - 1) {
break;
}
primeNumbers[k * i]++;
k++;
}
}
Scanner sc = new Scanner(System.in);
int sum = 0;
int min = -1;
int start = sc.nextInt();
int end = sc.nextInt();
for (int val = start; val <= end; val++) {
if (primeNumbers[val] == 0) {
if (min == -1) {
min = val;
}
sum += val;
}
}
if (min == -1) {
System.out.println(min);
} else {
System.out.println(sum);
System.out.println(min);
}
}
}
이번 문제에서는 들어오는 값의 범위가 10000까지이므로 해당 값까지의 모든 소수를 구해놓습니다.그 후, 들어온 값 범위에서 소수를 모두 찾아 합과 가장 작은 소수 값을 return해주도록 합니다.
소수를 찾지 못한 경우는 -1을 return해주도록 합니다.