목차
백준 단계별로 풀어보기
25.11.11
15단계: 약수, 배수와 소수 2
4948번: 베르트랑 공준
문제 링크 : https://www.acmicpc.net/problem/4948
문제를 풀기 위해 알아야 할 개념
>> 소수 판별 함수
: 아래 글에 정리해두었다.
소수 판별 함수 만들기
목차합성수의 특성: 합성수 N에 대하여 N = a × b 라고 하면, a와 b 둘 중 하나는 √N 보다 작거나 같다.--> 이를 활용하면 N이 소수인지 확인할 때, 1부터 √N까지만 반복하여 N을 나눈 나머지가 0이
mobics.tistory.com
문제 풀이
: 만든 소수 판별 함수 IsPrime() 를 통해
- while 반복문을 활용하여 StreamReader로 입력값을 받아 int값으로 변환하여 변수 n 에 담고, 소수 개수를 담을 변수 result 를 0으로 초기화한다.
- 입력값이 0이라면 반복문을 끝낸다.
- n 보다 크고, 2n 보다 작거나 같은 소수의 개수를 구해야하므로 for 반복문을 활용하여 n + 1 부터 2n 까지 반복하면서 만든 IsPrime() 함수로 소수를 찾으면 result 를 1 증가시킨다.
- 입력값 n 에 대하여 n 보다 크고, 2n 보다 작거나 같은 소수의 개수를 전부 찾았으면 그 result 값을 StringBuilder에 담는다.
- while 반복문을 탈출하면 StreamWriter로 StringBuilder에 담은 값을 출력한다.
정답 코드
using System.IO;
using System.Text;
class Backjoon
{
static void Main(string[] args)
{
using var sr = new StreamReader(Console.OpenStandardInput());
using var sw = new StreamWriter(Console.OpenStandardOutput());
StringBuilder sb = new StringBuilder();
while (true)
{
int n = int.Parse(sr.ReadLine());
int result = 0;
if (n == 0) break;
for (int i = n + 1; i <= 2 * n; i++)
{
if (IsPrime(i))
{
result++;
}
}
sb.AppendLine(result.ToString());
}
sw.Write(sb.ToString());
}
static bool IsPrime(int num)
{
if (num == 1) return false;
if (num == 2) return true;
if (num % 2 == 0) return false;
int limit = (int)Math.Sqrt(num);
for (int i = 3; i <= limit; i += 2)
{
if (num % i == 0) return false;
}
return true;
}
}'Development > Baekjoon' 카테고리의 다른 글
| [C#] 13909번: 창문 닫기 (0) | 2025.11.13 |
|---|---|
| [C#] 17103번: 골드바흐 파티션 (0) | 2025.11.12 |
| [C#] 1929번: 소수 구하기 (0) | 2025.11.10 |
| [C#] 4134번: 다음 소수 (0) | 2025.11.09 |
| [C#] 2485번: 가로수 (0) | 2025.11.08 |