좌충우돌 개발자의 길

백준 알고리즘 | 4948번 (베르트랑 공준) | 파이썬 본문

CODING TEST/백준

백준 알고리즘 | 4948번 (베르트랑 공준) | 파이썬

sustronaut 2021. 7. 14. 21:55

4948번 (베르트랑 공준)*

  • 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다.
  • 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다.
  • 예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23)
  • 자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오.
  • 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.
  • 입력의 마지막에는 0이 주어진다.
def prime_list(n):
    sieve = [True]*n

    m = int(n**0.5)
    for i in range(2, m+1):
        if sieve[i] == True:
            for j in range(i+i, n, i):
                sieve[j] = False

    return [i for i in range(2, n) if sieve[i] == True]


while True:
    n1 = int(input())
    if n1 == 0:
        break
    total = prime_list(2*n1+1)
    print(len([i for i in total if i > n1]))

해석