문제
https://www.acmicpc.net/problem/4948
4948번: 베르트랑 공준
문제 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 ��
www.acmicpc.net
문제는 위 사이트를 참고해주세요.
풀이
while True:
n = int(input())
if n == 0:
break
count = (2 * n) - n
for i in range(n+1, 2*n+1):
x = int(i ** 0.5)
for j in range(2, x+1):
if i % j == 0:
count -= 1
break
print(count)
처음에는 위와 같이 풀었지만 계속 시간 초과가 발생하여 방법을 바꿨습니다.
primeList = [True] * 246913
for i in range(2, 246913):
x = int(i ** 0.5)
for j in range(i+i, 246913, i):
if primeList[j] == True:
primeList[j] = False
while True:
n = int(input())
if n == 0:
break
count = 0
for k in range(n+1, 2*n+1):
if primeList[k] == True:
count += 1
print(count)
바꾼 방법은 처음부터 입력값의 최대 수인 123456의 2배만큼인 246912까지의 소수를 미리 구해놓고
while문을 돌려서 n값이 주어졌을 때 소수인것만 카운트해서 출력하게 했습니다.
가장 위 for문은
https://jongmin92.github.io/2017/11/05/Algorithm/Concept/prime/
소수 구하기 (에라토스테네스의 체)
소수(Prime Number)는 약수로 1과 자기 자신만을 가지는 정수입니다. 정수론의 기본 정리에 의해 모든 자연수는 단 하나의 소수들의 곱으로 표현됩니다. 소수 구하는 알고리즘1. 기본적인 접근소수��
jongmin92.github.io
이 원리를 사용해 소수를 판별한 것이기 때문에
제가 설명하는 것보다는 위 글을 읽고 직접 문제를 풀어보는 것이 더 좋을 것 같습니다.
결과
'IT > 알고리즘' 카테고리의 다른 글
1일 N알고리즘 - #25 (0) | 2020.05.25 |
---|---|
1일 N알고리즘 - #24 (0) | 2020.05.24 |
1일 N알고리즘 - #22 (0) | 2020.05.22 |
1일 N알고리즘 - #21 (0) | 2020.05.21 |
1일 N알고리즘 - #20 (0) | 2020.05.21 |
댓글