STUDY/알고리즘
[백준] 소수 구하기 (Python)
seonyounggg
2021. 3. 4. 11:08
✏️ 문제
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
✏️ 풀이
소수는 1을 제외하고, 1과 자기자신으로만 나눠지는 수를 의미한다.
보통은 2부터 자기 자신까지 수를 증가시켜가며 나머지가 0이 되는 경우가 있는지 살펴봐야 하지만
이 문제에서는 그렇게 풀이하면 시간초과가 난다.
따라서 반복문의 횟수를 줄여줘야 한다.
예를 들어 20의 경우, 1*20, 2*10, 4*5, 5*4, 10*2, 2*10 이므로
20^1/2 이후로는 동일한 수가 나타나는 것을 볼 수 있다.
따라서 반복문도 n^1/2까지만 돌면 된다.
이외에도 에라토스테네스의 체를 구현하여도 문제를 해결할 수 있다.
에라토스테네스의 체는 2의 배수, 3의 배수,, 를 순차적으로 제거하는 방식이다.
✏️ 코드
import math
M,N = map(int, input().split())
for i in range(M, N+1):
if i == 1:
continue
for j in range(2, int(math.sqrt(i)+1)):
if i % j == 0:
break
else:
print(i)