백준|4948번|베르트랑 공준

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
24/136

문제설명
임의의 숫자 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)

후기
나름 잘해보려고 했지만 아직도 시간이 많이 걸리는 것 같습니다. 알고리즘 공부를 더 열심히해야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글