알고리즘 연습
[2581번] 소수 - Java
밀깜
2021. 11. 12. 20:40
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
1. 배운점
2. 개선할 점
- N 이하 소수를 구할 때 2 ~ N-1의 범위 끝까지 반복문을 돌리지 않아도 될 것 같음. 개선점 찾아 다시 풀어볼 것!
3. 궁금한 점
4. 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
// import java.io.BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// M, N 받기
int startNum = Integer.parseInt(br.readLine());
int endNum = Integer.parseInt(br.readLine());
// 소수의 합과 최소값 출력하기
int total = 0; // 소수의 총합
int min = 10001; // 최솟값 초기값
// 입력한 값 만큼만 반복문 실행
for(int i = startNum; i <= endNum; i++) {
int count = 0;
// 2 ~ i 사이에 하나라도 나누어 떨어지는 경우 반복문 종료
for(int j = 2; j < i; j++) {
if(i % j == 0) {
break;
} else { // 그렇지 않은 경우 확인 count++
count++;
}
}
// 2 ~ i까지 모든 수로 나누어 떨어지지 않는 경우 총합++, 최솟값 비교
if (count == i - 2) {
total += i;
if(min > i) {
min = i;
}
}
}
// 결과 출력
if(total != 0) { // 소수가 존재하는 경우
System.out.println(total);
System.out.println(min);
} else { // 소수가 없는 경우
System.out.println(-1);
}
}
}