[백준] 2581

당당·2023년 4월 21일
0

백준

목록 보기
13/179
post-thumbnail

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

📔문제

자연수 MN이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.


📝입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.
MN10,000이하의 자연수이며, MN보다 작거나 같다.


📺출력

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


📝예제 입력 1

60
100

📺예제 출력 1

620
61

📝예제 입력 2

64
65

📺예제 출력 2

-1

🔍출처

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2006 > 중등부 1번
-문제의 오타를 찾은 사람: jh05013, sky1357
-데이터를 추가한 사람: kyaryunha, snapflip20
-잘못된 데이터를 찾은 사람: myungwoo


🧮알고리즘 분류

  • 수학
  • 정수론
  • 소수 판정

📃소스 코드

import java.util.Scanner;

public class Code2581 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int M=scanner.nextInt();
		int N=scanner.nextInt();
		
		int sum=0;
		int min=0;
		
		int count=0;
		
		for(int i=M;i<=N;i++) {
			if(i==1) {
				continue;
			}
			else {
				int j=1;
				count=0;
				while(i>=j) {
					if(i%j==0) {
						count++;
					}
					j++;
				}
				if(count==2) {
					sum=sum+i;
					if(min==0) {
						min=i;
					}
				}
			}
			
		}
		
		
		if(sum==0) {
			System.out.println(-1);
		}
		else {
			System.out.println(sum);
			System.out.println(min);
		}
	}

}

📰출력 결과


📂고찰

1978번이랑 비슷하다.

M부터 N까지 반복하면서, 각각의 수가 소수인지 아닌지 테스트하면 된다.
만약 약수가 자기자신이랑 1밖에 없다면 count는 2가 되고 count 가 만약 2라면, 소수인것이다. 그리고 min 값이 0이라면 본인이 제일 작은 소수인것이므로 i의 값을 더하고, 그렇지 않으면 min은 건드리지않는다.
그리고 count가 2인 것들끼리 합을 구한다.

그리고, 1은 소수가 아니므로 만약 M1이라면, 다음 for문으로 간다.

0개의 댓글