[백준 1929] 소수 구하기 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
에라토스테네스의 체
를 활용하여 주어진 숫자 m
이상 n
이하의 범위에서 모든 소수를 찾고 출력하는 문제입니다.
에라토스테네스의 체
에 대한 자세한 설명은 여기 에서 확인하실 수 있습니다.
해당 문제에서 C#
의 경우 StringBuilder
을 사용하지 않으면 시간 초과
가 됨에 주의합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
namespace Solution {
using System.Text;
class Program {
static void Main(string[] args) {
var input = Console.ReadLine()!.Split(' ');
var m = int.Parse(input[0]);
var n = int.Parse(input[1]);
var isPrime = Enumerable.Repeat(true, n + 1).ToArray();
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
var sb = new StringBuilder();
for (int i = m; i <= n; i++) {
if (isPrime[i])
sb.AppendLine(i.ToString());
}
Console.Write(sb.ToString());
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m, n; cin >> m >> n;
vector<bool> isPrime(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
for (int i = m; i <= n; i++) {
if (isPrime[i]) cout << i << "\n";
}
return 0;
}