백준 python 기록
백준 4948 베르트랑 공준
작지
2021. 9. 16. 10:54
백준 링크:https://www.acmicpc.net/problem/4948
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
에라토스테네스의 체를 사용하면 간단하게 풀수있다.
import math
def is_prime_number(n,s):
arr = [True for i in range(n+1)]
for i in range(2,int(math.sqrt(n)+1)):
if arr[i] == True:
j = 2
while i * j <= n:
arr[i*j] = False
j += 1
for j in range(s+1):
arr[j] = False
return [i for i in range(2, n+1) if arr[i]]
while True:
s = int(input())
if s == 0:
break
else:
n = s*2
print(len(is_prime_number(n,s)))
arr로 배열을 전부 True로 설정한 뒤
최댓값 n의 int(제곱근)을 설정후 +1
만약 arr[i]가 True라면 arr안에있는 arr[i] 배수를 전부 False로 전환한다.
또한 문제 조건은 특정수 미만은 전부 제외이므로 계산이 끝났다면 다시 for in문을 돌려서 미만값은 False처리한다.