알고리즘 연습

[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);
		}
	}
}