글 작성자: 취업중인 피터팬
728x90

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

 

2581번: 소수

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

www.acmicpc.net

 

문제 설명

 

주어진 수를 소수인지 아닌지 확인 한 후에 전체 총합과 가장 작은 수를 구하는 문제입니다.

 

문제 풀이

 

https://kkungchan.tistory.com/258

 

8단계 문제 번호 1978번 : 소수 찾기 - JAVA [자바]

https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제 설명 주어진..

kkungchan.tistory.com

 

소수 찾기는 위에 코드를 똑같이 사용하겠습니다.

위에 블로그를 보시면 소수를 찾는 방법에 대한 설명이 있습니다.

저기서 주어진 수가 n,m이니깐 num을 i로 바꾸고 i를 n~m으로 변경해 주면 됩니다.(부등호도 <=)로 변경해 줍니다.

그 후에 최초로 발견된 소수를 first에 넣어주겠습니다. first에 수가 들어가 있지 않으면 소수가 없는 것임으로 -1을 출력하도록 하겠습니다.

 

정답

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int m = sc.nextInt();
		int first = 0;
		int sum = 0;
	
		for(int i = n; i <= m; i++) {
			boolean flag = true;
			if(i == 1) {
				flag = false;
			}
			else if(i != 2) {
				for(int j=2; j<i; j++) {
					if(i%j == 0) {
						flag = false;
					}
				}
			}
			
			if(first == 0 && flag == true) {
				first = i;
			}
			
			if(flag == true) {
				sum += i;
			}
		}
		if(first != 0) {
			System.out.println(sum);
			System.out.println(first);
		}
		else {
			System.out.println("-1");
		}
		
		
    }
}