4948번 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여 n과 2n사이에는 적어도 하나의 소수가 존재한다는 내용을 담고 있다고 한다.
입력한 숫자와 그 숫자의 두배 값 사이의 소수를 구하는 문제.
import sys
input = sys.stdin.readline
while 1:
n = int(input())
if n == 0:
break
m = {}
lst = list(range((n*2)+1))
for i in lst[2:]:
if lst[i] > n:
m[i] = 1
# 시간을 조금이라도 줄여보고자 딕셔너리를 사용한 나의 흔적...ㅎ
lst[i::i] = ((n*2)//i) * [0]
# 소수의 배수들은 0으로 대입했다.
print(len(m))
첫 입력한 코드이다.
또 시간초과가 떴다 ㅠ...
가면 갈수록 계산하는 시간과의 싸움 같은 너낌...
import sys
input = sys.stdin.readline
def prime(n): # 함수를 만들어 줬다.
m = []
lst = list(range((n*2)+1))
# 2n보다 작거나 같은 소수이기 때문에 1을 더해준다.
for i in lst[2:]:
if lst[i] > n:
m.append(i)
lst[i::i] = ((n*2)//i) * [0]
print(len(m)) # 소수는 리스트로 만들어 길이 출력
while 1: # 0이 입력 될 때까지 계속 돌아가도록 해야해서 while문을 사용했다.
n = int(input())
if n == 0: # 마지막 0이 입력되면 프로그램 종료
break
else: # 소수의 개수를 출력하는 만들어둔 함수를 사용
prime(n)
함수를 만들어 사용한거 말고는 입력한 내용은 비슷한데
이건 또 통과이다...ㅎㅎ...