본문 바로가기
문제 해결/BaekJoon

[백준] [C++] 2581번 소수

by WSLim_97 2023. 1. 5.
반응형

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

 

2581번: 소수

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

www.acmicpc.net


코드

#include <iostream>
using namespace std;

bool Check(int input);

int main()
{
	int num, start, end, min = 10001, sum = 0;
	cin >> start >> end;

	for (int num = start; num <= end; num++)
	{
		if (!Check(num))
			continue;
		
		sum += num;
		if (num < min)
			min = num;
	}

	if (sum == 0)
		cout << "-1" << endl;
	else
		cout << sum << "\n" << min;

	return 0;
}

bool Check(int input)
{
	if (input <= 1)
		return false;
	if (input == 2)
		return true;

	for (int i = 2; i < input; i++)
	{
		if (input % i == 0)
			return false;
	}

	return true;
}

풀이

두 자연수 start, end를 입력하여 start와 end 사이의 자연수 중 소수인 것을 찾아 그 합을 더하고 최솟값을 출력하는 문제이다.

 

이 전의 소수를 찾는 문제인 1978번에서 사용한 소수 찾기 함수를 사용했다.

 

소수를 찾는 함수가 false, 즉 소수가 아니라면 continue를 사용해 다음 반복으로 넘어가고 소수라면 sum에 더한 뒤 최솟값인지 확인하여 최솟값이라면 min 변수에 저장하도록 하였다.

 

최종적으로 sum의 값이 0, 즉 소수가 존재하지 않는다면 -1을 출력하고 소수가 존재한다면 그 합과 최소값을 출력한 뒤 종료한다.

 

 

https://wslim8256.tistory.com/174

 

[백준] [C++] 1978번 소수 찾기

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

wslim8256.tistory.com

 

반응형