코딩일지/python 백준 알고리즘

python 백준 알고리즘 4948번: 베르트랑 공준

야언 2022. 9. 15. 16:45

https://www.acmicpc.net/problem/4948

 

4948번: 베르트랑 공준

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼

www.acmicpc.net

 

n부터 2n까지의 소수 구하기

 

이번엔 제곱근을 이용하여 소수를 구해도 시간초과에 걸린다;; 

문제에서 주어진 범위 내 소수를 먼저 구한 뒤 리스트를 대조하는 형식으로 문제 해결

덤으로 제곱근을 구하는데 파이썬 math 라이브러리를 import 하여 안에 정의된 sqrt 함수를 이용했다.

 

from math import sqrt

def prime(n):  # 소수 구하기
    if n == 1:
        return False
    for i in range(2,int(sqrt(n))+1):
        if n % i == 0:
            return False
    return True

numbers = list(range(2,246912))  # 제한 영역까지
prime_list = []								

for i in numbers:						
    if prime(i):							
        prime_list.append(i)  # 소수 리스트 만들어놓기					

n = int(input())

while True:
    cnt = 0					
    if n == 0 :
            break
    for i in prime_list:  # 소수 리스트와 대조			
        if n < i <=2*n:  # 소수 리스트 안의 숫자가 n~2n 사이에 있다면		
            cnt += 1  # 카운트 +1
    print(cnt)
    n = int(input())  # 0 입력받기 전까지 계속 입력