알고리즘 문제

[백준] 2581번 소수

feelcoding 2020. 2. 3. 16:25
728x90
 

2581번: 소수

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

www.acmicpc.net

1은 소수가 아니라는 거 아주 잘 알면서도 코드 짤 때에는 그걸 생각을 안 하고 코드를 짠다.

소수 문제 풀 때 꼭 기억하자 1은 소수가 아니다!

1은 따로 예외로 두고 코드를 짜자.

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

int main() {
	int m, n;
	cin >> m >> n;
	vector<int> v;
	for (int i = m; i <= n; i++) {
		bool flag = false;
		for (int j = 2; j < i / 2 + 1; j++) {
			if (i % j == 0) {
				flag = true;
				break;
			}
		}
		if (i == 1) flag = true;
		if (!flag) v.push_back(i);
	}
	if (v.size() == 0) cout << -1 << endl;
	else {
		int total = 0;
		for (int i = 0; i < v.size(); i++) {
			total += v[i];
		}
		cout << total << endl;
		cout << v[0] << endl;
	}
	return 0;
}
728x90