백준_4948번

정소담·2023년 1월 25일
0

BOJ Short Review

목록 보기
16/44
post-thumbnail

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)

함수를 만들어 사용한거 말고는 입력한 내용은 비슷한데
이건 또 통과이다...ㅎㅎ...

profile
Hi ! I'm newbie :)

0개의 댓글