just inside

[백준] Silver 3. 1929 - 소수구하기 python 본문

coding test/구현

[백준] Silver 3. 1929 - 소수구하기 python

방울도마도 2024. 7. 11. 12:27
728x90

문제 링크

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


문제 설명

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

 

입력

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

 

출력

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


제출 코드

import sys
import math

input = sys.stdin.readline

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

nums = [True]*(n+1)

for i in range(2, int(math.sqrt(n))+1):
    if nums[i]:
        for j in range(i*i, n+1, i):
            nums[j] = False

for i in range(max(2,m), n+1):
    if nums[i]:
        print(i)

 

풀이

  • 에라토스테네스의 체 방식으로 풀이한다.
  • 2부터 n의 제곱근까지의 수에 대해서 소수인지 확인하고, 소수인 경우 해당 수의 배수에 대해 False 처리한다.
  • 주어진 m과 n 범위 내의 숫자에 대해서 소수라면 출력한다. 이 때, m이 2보다 작은 수일 수 있으므로 range 함수에서 max(2,m) 의 수로 시작한다.

 

 

알아둘 사항

  • 에라토스테네스의 체로 푼 풀이 : 메모리는 조금 더 쓰지만 시간이 빠르다

  • 정수 판별 함수로 숫자 하나씩 확인하는 풀이 : 메모리는 조금 덜 쓰지만 시간이 많이 걸린다.

import sys
input = sys.stdin.readline

M, N = map(int, input().split())

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

for i in range(M, N+1):
    if isPrime(i):
        print(i)
728x90