코딩성장스토리

백준 2581번 :소수 본문

백준 코딩

백준 2581번 :소수

까르르꿍꿍 2021. 9. 23. 16:08

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

 

2581번: 소수

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

www.acmicpc.net

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

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

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

include<iostream>
#include<vector>
#include<string>
using namespace std;


int prime(int n) {
	if (n < 2)
		return 0;
	for (int i = 2; i < n; i++) {
		if (n % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	vector<int> ans;
	int m, n;
	int sum = 0;
	int min = 0;
	cin >> m >> n;
	for (int i = m; i <= n; i++) {
		if (prime(i))
			ans.push_back(i);                 //소수면 ans벡터에 집어 넣기
	}
	int len = ans.size();        //소수가 몇개 들어갔는지 알기위함
		cout << -1;
	else
	{
		min = ans[0];
		for (int i = 0; i < len; i++) {
			sum += ans[i];                                //합
			if (min > ans[i])
				min = ans[i];                                  //최소값
		}
		cout << sum << '\n' << min;
	}
	return 0;
}