반응형
문제
풀이
처음에 입력받은 수에 대해서 숫자를 세는 방식으로 문제를 풀었는데 시간 초과가 되었다.
가장 큰 수(123456)까지 소수가 아닌지 기억한 후 입력받은 구간에 대해서 소수의 개수를 세는 방식으로 바꿔서 통과되었다.
통과된 풀이
sosu = [0] * (123456 * 2 + 1)
def isPrime(num):
if num == 1:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
for i in range(2,len(sosu)):
if isPrime(i):
sosu[i] = 1
while True:
n = int(input())
if not n:
break
print(sum(sosu[n+1:2*n+1]))
반응형
'Algorithm > BaekJoon' 카테고리의 다른 글
[백준 12904] A와 B python (0) | 2022.02.11 |
---|---|
[백준 9020] 골드바흐의 추측 python (0) | 2022.02.05 |
[백준 1929] 소수 구하기 (+에라토스테네스의 체) python (0) | 2022.02.04 |
[백준 11653] 소인수 분해 python (0) | 2022.02.04 |
[백준 1011] Fly me to the Alpha Centauri 파이썬 python (0) | 2022.02.02 |