반응형
[ Contents ]
1. 문제 (링크 참조)
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
2. 문제 풀이
n보다 크고 2n보다 작은 소수의 개수를 출력하는 문제입니다.
2022.02.08 - [Algorithm] - [Algorithm] 소수 판별 알고리즘, 에라토스 테네스의 체
[Algorithm] 소수 판별 알고리즘, 에라토스 테네스의 체
에라토스 테네스의 체를 통해서 소수를 판별하는 알고리즘을 알아보겠습니다. [ Contents ] 1. 소수 소수(Prime): 약수가 1과 자기 자신밖에 없는 수 '소수'는 1과 자기 자신으로만 나누어 떨어지는
star7sss.tistory.com
최대 123457부터 246912까지의 소수 개수를 구해야 합니다. 단순히 하나씩 소수를 판정하면 시간초과가 뜹니다. '에라토스 테네스의 체'를 이용해서 소수를 판정해야 합니다.
3. 코드
import sys
input = sys.stdin.readline
# 에라토스 테네스의 체
def isPrime(n):
primeList = [True] * n
for i in range(2, int(n ** 0.5) + 1):
if primeList[i]: # i가 소수라면
for j in range(2 * i, n, i): # 2i부터 n까지 i의 배수들은 False
primeList[j] = False
return [i for i in range(2, n) if primeList[i] == True] # 소수인 것만 리턴
while True:
n = int(input())
if n == 0: # 0 입력 시 종료
break
primeList = isPrime(2*n+1) # 2n까지 소수 판별
cnt = 0
for i in primeList:
if i > n:
cnt += 1 # n보다 큰 소수의 개수 세기
print(cnt)
에라토스 테네스의 체를 이용합니다. 해당 코드에 대한 설명은 위 링크의 '소수판별 알고리즘, 에라토스 테네스의 체'에서 보실 수 있습니다.
2n까지 에라토스 테네스의 체로 소수판별을 하고, 그 중 n보다 큰 소수만 세서 출력합니다.
반응형
'Algorithm' 카테고리의 다른 글
[Algorithm] 이진탐색(Binary Search), 반반 나누어서 찾자 (0) | 2022.02.09 |
---|---|
[구현/수학] 백준 1769 3의 배수 - Python (0) | 2022.02.09 |
[수학/소수] 백준 11653 소인수분해 - Python (0) | 2022.02.09 |
[수학/소수] 백준 2581 소수 - Python (0) | 2022.02.09 |
[구현/수학] 백준 10250 ACM호텔 - Python (0) | 2022.02.09 |
댓글