문제

image

풀이

import sys
import math

input = sys.stdin.readline

lst = [True for i in range((123456 * 2) + 1)] #리스트는 2n의 최대 범위인 (123456 * 2) 크기가 되야 한다.

result = []

result_out = []



def is_prime_number(n): #에라테네스의 채 사용
    lst[0] = False
    lst[1] = False #degenerate case 처리
    for i in range(2,n+1):
        if lst[i] == True:
            j = 2
            while i * j <= n:
                lst[i * j] = False #i의 배수가 되는 lst의 index는 false 처리
                j += 1
is_prime_number(123456 * 2) 

while True: #입력 값은 0이 입력될 때까지 result 리스트에 담음
    a = int(input())
    if a == 0:
        break
    else:
        result.append(a)
    
for i in result: #result의 인자를 계속 꺼냄
    cnt = 0
    for j in range(i+1,(i *2)+1): #i 이상 i*2이하의 소수가 존재하는지 lst에서 찾음 
        if lst[j]:
            cnt += 1
    result_out.append(cnt)

for i in result_out:
    print(i)

결과

image