백준

백준 2581 소수(Java)

Park DJ 2023. 1. 19. 23:05

https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 자연수 n과 m이 주어질 때 n이상 m이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 문제입니다. 먼저 소수를 판별해야 하기 때문에 n부터  m까지의 반복문 안에서 해당수를 1부터 자기 자신까지 나누었을 때의 경우가 2인 경우면 소수이므로 sum에 더해주고 min과의 비교를 통해 최솟값을 찾으면 됩니다. 마지막으로 sum이 0인 경우는 소수가 없는 경우이므로 -1을 출력해 주면 됩니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int n = sc.nextInt();
    int m = sc.nextInt();
    int sum = 0;
    int min = 10000;

    for(int i = n; i <= m; i++) {
      int count = 0;
      for(int j = 1; j <= i; j++) {
        if(i % j == 0) count++;      //약수인 경우 count++
      }
      if(count == 2) {               //양의 약수가 2인경우 = 소수
        sum += i;
        if(min > i) min = i;
      }
    }
    
    if(sum == 0) System.out.println(-1);     //소수가 없는 경우
      
    else {
    System.out.println(sum);
    System.out.println(min);
    }
    
  }
}