BEAKJOON

백준(2581번 소수)풀이 C++

Shin_jisoo 2021. 1. 13. 12:28
728x90

www.acmicpc.net/problem/2581

 

2581번: 소수

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

www.acmicpc.net

1) 주석 없는 VERSION

#include <stdio.h>
#include <iostream>
#include <string>
#include <cmath> 

using namespace std;

int find(int n) {
	if (n <= 1) {
		return false;
	}

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

	return true;
}

int main() {
	int m, n;
	cin >> m >> n;

	int answer = 0;
	int min = m;

	while (m <= n) {
		if (find(m)) {
			min = m;
			break;
		}
		
		m++;
	}

	while(m<=n) {
		if (find(m)) {
			answer += m;
		}
		
		m++;
	}

	

	if (answer == 0) {
		cout << "-1";
	}
	else {
		cout << answer << "\n" << min;
	}

}

 

2) 주석 있는 VERSION

#include <stdio.h>
#include <iostream>
#include <string>
#include <cmath> 

using namespace std;

//에라토스테네스의 소수 필요 충분조건은 그 숫자가 2보다 크면서 
//자기 자신의 제곱근까지의 수에 나눠지지 않는 수
int find(int n) {
	if (n <= 1) {
		return false;
	}

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

	return true;
}

int main() {
	int m, n;
	cin >> m >> n;

	int answer = 0;
	int min = m;

	// for 문으로 돌릴 경우 시간 초과 이므로 while 문으로 할 것
	while (m <= n) {
		if (find(m)) {
			min = m;
			break;
		}
		
		m++;
	}

	while(m<=n) {
		if (find(m)) {
			answer += m;
		}
		
		m++;
	}

	
	//소수가 없을 경우 -1 출력
	if (answer == 0) {
		cout << "-1";
	}

	else {
		cout << answer << "\n" << min;
	}

}