반응형
1. 문제
2. 코드
import sys
import math
sosu = [0 for i in range(123457*2)]
sosu[1] = 0
sosu[2] = 1
for i in range(2, 123457*2):
temp_i = int(math.sqrt(i))
flag = 0
for j in range(2, temp_i+1):
if i%j == 0:
flag = 1
break
if flag == 0:
sosu[i] = 1
while 1:
n = int(input())
#n = int(sys.stdin.readline())
cnt = 0
if n == 0:
break
for i in range(n+1, 2*n+1):
if sosu[i] == 1:
cnt += 1
sys.stdout.write(str(cnt))
sys.stdout.write('\n')
3. 주요 포인트
숫자를 받고 그 수에 해당하는 소수를 계산하면 무조건 시간 초과난다.
미리 input제한만큼인 123456*2만큼 소수인지 아닌지 판단한 list(sosu)를 만들어놓고,
그 list에서 수만 세는 것이 포인트이다.
input의 제한이 강력할 경우, 미리 list를 만들어 놓고 판단하는 것이 빠르다는 것을 새겨놓자.
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 3053번 - 택시 기하학 (0) | 2021.11.08 |
---|---|
[백준] 9029번 - 골드바흐의 추측 (0) | 2021.11.08 |
[백준] 11650번 - 좌표 정렬하기 (파이썬) (feat. lambda) (0) | 2021.11.08 |
[백준] 1463번 - 1로 만들기 (파이썬 코드) (feat. DP) (0) | 2021.11.08 |
[백준] 2108번 - 통계학 (파이썬 풀이) (feat. collections, sys) (0) | 2021.11.07 |