728x90
https://www.acmicpc.net/problem/4948
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
일단 당연히 소수와 관련된 문제이기에 에라토스테네스의 체를 사용해서 풀었다.
에라토스테네스의 체
Sieve of Eratosthenes 고대 그리스의 수학자 에라토스테네스 가 만들어 낸 소수 를 찾는 방법.
namu.wiki
그렇게 풀었어도 시간 문제가 발생했었는데, 입력이 있을 때마다 계산을 해서 출력을 했기 때문이었다.
import sys
while True:
n = int(sys.stdin.readline().strip())
if n == 0:
break
number = [True for i in range(2 * n + 1)]
for i in range(2, int((2 * n + 1) ** 0.5) + 1):
if number[i]:
for t in range(i + 1, 2 * n + 1):
if t % i == 0:
number[t] = False
print(number[n + 1: 2 * n + 1].count(True))
이렇게 풀었는 데, 시간 문제가 발생해서
입력을 받기 전에 계산을 모두 해두고, 출력만 바로바로 할 수 있도록 하였다,
import sys
number = [True for i in range(123456 * 2 + 1)]
for i in range(2, int((2 * 123456 + 1) ** 0.5) + 1):
if number[i]:
for t in range(i + 1, 2 * 123456 + 1):
if t % i == 0:
number[t] = False
while True:
n = int(sys.stdin.readline().strip())
if n == 0:
break
print(number[n + 1: 2 * n + 1].count(True))
이렇게 풀었더니 시간 문제가 발생하지 않았다.
'알고리즘 > 정수론' 카테고리의 다른 글
백준 2023 신기한 소수 (Python) (0) | 2024.03.02 |
---|---|
백준 9020 골드바흐의 추측 (Python) (0) | 2024.03.02 |
백준 1476 날짜 계산 (Python) (0) | 2024.03.02 |