[til] 알고리즘 백준 1929

유승완유승완
1 min read

📌 오늘의 알고리즘 문제 (소수 구하기)

🚩 문제 설명

백준 1929번: https://www.acmicpc.net/problem/1929

주어진 자연수 M 이상 N 이하의 소수를 모두 출력하는 문제다.

📖 풀이 전략

  • 특정 숫자가 소수인지 확인하는 간단한 알고리즘을 사용했다.

  • 2부터 그 숫자의 제곱근까지만 나누어보며 나누어떨어지면 소수가 아니다.

  • 입력 범위 내 모든 수에 대해 위 과정을 반복했다.

💡 핵심 포인트

  • 소수 판별의 효율성

    • 숫자 x가 소수인지 확인할 때 x의 제곱근까지만 확인하면 된다.

    • 이유: 약수가 존재한다면 무조건 제곱근 이하에 존재하기 때문이다.

🛠️ 사용한 알고리즘 및 함수

  • 소수 판별 함수 is_prime()

  •   def is_prime(x):
          if x == 1:
              return False
          for i in range(2, int(math.sqrt(x) + 1)):
              if x % i == 0:
                  return False
          return True
    

📌 배운 점

  • 소수를 효율적으로 판별할 때는 제곱근까지만 반복하면 충분하다.

  • 범위 내에서 여러 소수를 출력하는 경우, 반복문과 소수 판별 함수를 분리해 가독성을 높일 수 있다.

💻문제풀이 전체코드

import sys
import math


def is_prime(x):
    if x == 1:
        return False
    for i in range(2, int(math.sqrt(x) + 1)):
        if x % i == 0:
            return False
    return True


m, n = map(int, sys.stdin.readline().split())

for i in range(m, n + 1):
    if is_prime(i):
        print(i)
0
Subscribe to my newsletter

Read articles from 유승완 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

유승완
유승완