🧩PS/🥈Nomal
[C/C++] 백준 2581번 - 소수 (에라토스테네스의 체)
Cocoon_
2021. 6. 7. 00:51
반응형
<코드>
#include<iostream>
#include<algorithm>
using namespace std;
int check[10001]; // 0: 초기상태, 1: 소수, 2: 소수X
int main()
{
int N, M;
int ans = 0;
int mini = 10000;
for (int i = 2; i <= 10000; i++)
{
if (check[i] == 2) continue;
else check[i] = 1;
for (int j = i + i; j <= 10000; j += i)
{
check[j] = 2;
}
}
cin >> N >> M;
for (int i = N; i <= M; i++)
{
if (check[i] == 1) {
mini = min(mini, i);
ans += i;
}
}
if (ans == 0) {
cout << -1;
}
else {
cout << ans << '\n';
cout << mini << '\n';
}
}
풀이 방법
에라토스테네스의 체 알고리즘으로 위와같이 소수를 빠르게 구할 수 있다.
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
반응형