문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
코드
using System;
using System.Text;
public class Program
{
public static void Main()
{
// :: 입력 M, N
string[] input = Console.ReadLine().Split(' ');
// :: 변환 : M, N
int numMin = int.Parse(input[0]);
int numMax = int.Parse(input[1]);
// :: 참고 : 에라토스테네스의 체
// :: https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4
// :: 배열 제작 : 기본값 false
bool[] primes = new bool[numMax +1];
primes[1] = true; // : 1 예외 처리
// :: 소수가 아닌 것에 : true 처리
for(int index = 2; index * index <= numMax; index++) {
// :: 소수일 때
if(!primes[index]) {
// :: 초기값은 소수 * 소수
// :: 증가값은 +소수
for(int multiple = index + index; multiple <= numMax; multiple += index) {
primes[multiple] = true;
}
}
}
// :: 출력 확인
StringBuilder print = new StringBuilder(); // : string을 쓸 경우 개행 문제인지, 메모리 초과가 뜸
for(int index = numMin; index <= numMax; index++) {
if(!primes[index]) {
//Console.WriteLine(index);
print.Append(index + "\n");
}
}
// :: 출력
Console.WriteLine(print);
}
}
참고
- string
- string은 값 타입이 아닌 참조 변수
- 문자열을 조합할 때마다 새로운 클래스가 생성
- 문자열을 조합할 때마다 부하가 발생
- StringBuilder
- 새로운 변수를 사용하지 않고 결합
사이트 : 생각대로 살지 않으면 사는대로 생각한다. :: [C#] string 과 StringBuilder 사용 (tistory.com)
'C# > Baekjoon' 카테고리의 다른 글
백준 4948 : 베르트랑 공준 (0) | 2022.04.06 |
---|---|
백준 11653 : 소인수분해 (0) | 2022.03.30 |
백준 2581 : 소수 (0) | 2022.03.29 |
백준 1978 : 소수 찾기 (0) | 2022.03.28 |
백준 10757 : 큰 수 A+B (0) | 2022.03.25 |