문제
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
풀이
에라토스테네스의 체를 이용하여 풀었다. 입력의 한계를 고려하여 사용했던 숫자를 기록해둔 후에 중복 계산을 피하는 방식으로 최적화를 했다. 하지만, 먼저 모든 해를 구한 것과 시간 차이는 그리 크지 않았다(30ms).
코드
1번 풀이
N = 123456
max_num = 0
isPrime = [False, False] + [True]*(2*N - 1)
def count_num(n):
global max_num
if max_num < n:
for i in range(max_num*2 + 1, 2*n + 1): # max_num*2까지는 계산이 되었으므로
if isPrime[i]:
for j in range(2*i, 2*N + 1, i):
isPrime[j] = False
max_num = n
return isPrime[n+1:2*n + 1].count(True)
else:
return isPrime[n+1:2*n + 1].count(True)
while True:
n = int(input())
if n:
print(count_num(n))
else:
break
2번 풀이
N = 123456
max_num = 0
isPrime = [False, False] + [True]*(2*N - 1)
for i in range(2, 2*N + 1): # max_num*2까지는 계산이 되었으므로
if isPrime[i]:
for j in range(2*i, 2*N + 1, i):
isPrime[j] = False
while True:
n = int(input())
if n:
print(isPrime[n+1:2*n + 1].count(True))
else:
break
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 14502 - 연구소 [Python(파이썬)] (0) | 2021.01.06 |
---|---|
[백준] 11052 - 카드 구매하기 [Python(파이썬)] (0) | 2021.01.06 |
[백준] 10844 - 쉬운 계단 수 [Python(파이썬)] (3) | 2021.01.06 |
[백준] 1149 - RGB거리 [Python(파이썬)] (0) | 2021.01.06 |
[백준] 14725 - 개미굴 [Python(파이썬)] (0) | 2021.01.01 |