알고리즘
[백준] 4948 베르트랑 공준
유노비
2023. 10. 17. 22:41
import math
import sys
data = []
while True:
n = int(sys.stdin.readline().rstrip())
if n == 0: # 마지막 테스트케이스가 나오면 중단하기
break
data.append(n)
decimal = set(range(min(data) + 1, max(data)*2 + 1)) # 테스트케이스 중 가장 작은 수 ~ 가장 큰수의x 2 의 범위까지에 존재하는 소수를 구한다
for i in range(2, int(math.sqrt(max(data)*2))+1): # 2 ~ 루트M(=M의 약수들 중에서 중간값) 까지 증가시킨다. (<-에라토스테네스의 체 방식)
remove_element = set(range(i,(max(data)*2)+1,i)) # 2~ 루트M까지의 수의, 배수 set 을 생성
remove_element.discard(i)
decimal = decimal - remove_element # 2~ 루트M까지의 수의, 배수를 제거한다
decimal.discard(1) # 1이 포함되어있을 경우 삭제하기
for i in data:
print(len(list(filter(lambda x: x > i and x <= (i*2), decimal)))) # 각 테스트케이스마다 존재하는 소수의 갯수 구하기
반응형