알고리즘

[C++] 백준 2581번 소수

J3SUNG 2019. 8. 23. 16:57
728x90

m~n까지의 숫자에서 소수들의합과 첫번째로 나오는 소수를 출력하는 문제입니다.

먼저 n까지의 소수를 다 구하고
for문을 통해 구한 소수들을 다 합하며
첫번째로 나온 소수를 체크해서 문제를 풀었습니다.

소수는 각 소수의 곱을 제외하는 것으로 구하였습니다.

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int arr[10010];

int main(int argc, char *argv[])
{
	int m, n;
	int sum = 0;
	int flag = 0;
	int first = 0;

	cin >> m >> n;

	memset(arr, 0, sizeof(arr));

	arr[0] = 1;
	arr[1] = 1;
	for (int i = 2; i <= n; ++i) {
		if (arr[i] == 1) {
			continue;
		}
		for (int j = i * 2; j <= n; j += i) {
			arr[j] = 1;
		}
	}

	for (int i = m; i <= n; ++i) {
		if (flag == 0 && arr[i] == 0) {
			first = i;
			flag = 1;
		}
		if (arr[i] == 0) {
			sum += i;
		}
	}
	
	if (sum == 0) {
		cout << "-1" << endl;
		return 0;
	}

	cout << sum << endl;
	cout << first << endl;

	return 0;
}