[백준/1929번/파이썬(Python)] 소수 구하기

문제 링크

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

 

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오

 

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

 

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

 

예제 입력

3 16

예제 출력

3
5
7
11
13

 

풀이

  • 시간초과에 주의(시간 복잡도 줄이는 방법 찾기)
  • 시간을 단축시키기 위해 반복문을 최소한으로 타는 방법 찾기
  • 1은 소수가 아니므로 생략
  • 처음에는 반복문을 2부터 (n // 2) + 1 까지 했는데 시간초과가 발생 
  • 결국 인터넷을 검색해서 반복문을 2부터 int(num ** 0.5) + 1까지 해서 통과
  • 에라토스테네스의 체라는 것을 이용해서 숫자의 제곱근의 약수의 여부를 검증하면 된다
  • 에라토스테네스의 체 참조 - https://coding-factory.tistory.com/600
 

[Algorithm] 에라토스테네스의 체 - 소수 구하기 (범위)

에라토스테네스의 체란? 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법이며 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 부릅니다. 특

coding-factory.tistory.com

 

소스 코드

m, n=map(int,input().split())


def isPrime(num):
    if num == 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    else:
        return True


for i in range(m, n+1):
    if isPrime(i):
        print(i)

댓글