문제설명
임의의 숫자 n들을 입력받아서 n과 n*2 사이의 소수의 개수를 구하는 문제입니다.
작동 순서
1. 숫자들을 입력받습니다.
2. 에라토스테네스의 체를 활용하여 1부터 입력받은 숫자의 최대값의 2배 사이에서 소수를 찾습니다.
3. 위에서 찾아낸 소수들을 입력받은 수와 입력받은 수*2 사이의 소수들을 찾아냅니다.
4. 위에서 찾아낸 소수들의 개수를 출력합니다.
소스코드
import sys
n = []
while True:
ans = int(sys.stdin.readline())
if ans == 0:
break
n.append([ans])
prime = [False, False]+[True]*(max(map(max, n))*2-1)
for i in range(2, int(len(prime)**0.5)):
if prime[i]:
j = i
while True:
j += i
if j > len(prime)-1:
break
prime[j] = False
for i in range(len(n)):
for j in range(n[i][0]+1, n[i][0]*2+1):
if prime[j]:
n[i].append(j)
for i in range(len(n)):
print(len(n[i])-1)
후기
나름 잘해보려고 했지만 아직도 시간이 많이 걸리는 것 같습니다. 알고리즘 공부를 더 열심히해야 할 것 같습니다.