한 걸음씩 기록하며

[백준] 4948번 베르트랑 공준 본문

알고리즘 & 코딩테스트

[백준] 4948번 베르트랑 공준

Haksae 2022. 3. 2. 11:31

⛏ 문제 파악

  • 주어지는 임의의 숫자 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수의 값을 구하는 문제
  • 에라토스테네스의 체의 방법으로 문제를 풀면 된다.
  • 제한 사항에서 n이 123,456까지 주어진다는 것을 생각하여 체를 만들면 된다.

👉🏻  답안

import math
import sys

def isPrime(n):
    if n == 1:
        return False 
    else:
        for i in range(2, int(math.sqrt(n))+1):
            if n % i == 0:
                return False
        return True

all_list = list(range(2, 246912))
prime_list = []
for i in all_list:
    if isPrime(i):
        prime_list.append(i)

n = int(sys.stdin.readline())

while n != 0:
    count = 0
    for i in prime_list:
        if n < i <= n*2:
            count +=1
    print(count)
    n = int(sys.stdin.readline())

📑  간단한 설명

  • 체를 크게 만들어야하기 때문에 시간 절약을 위해, sys.stdin.readline()으로 입력을 받았다.
  • 소수 판별을 위해 math.sqrt 함수를 사용했다.
  • all_list라는 체는 2n을 기준으로하여 246,912를 만들었다.
  • 끝으로 임의의 수 n보다 크고 2n보다 작은 i(소수)의 갯수를 카운트하여 출력하였다.
Comments