알고리즘 & 코딩테스트

[백준] 1929번 소수구하기

Haksae 2022. 3. 4. 02:03

⛏ 문제 파악

  • M 이상 N 이하의 소수를 모두 출력하는 프로그램
  • 일렬로 출력되어야한다.

👉🏻  답안

 

  • 에라토스테네스의 체 그 자체인 코드

 

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

sieve = [True] * (N + 1)
sieve[0] = False
sieve[1] = False

for i in range(2, N + 1):
    if sieve[i]:
        for j in range(i + i, N + 1, i):
            sieve[j] = False
for i in range(M, N + 1):
    if sieve[i]:
        print(i)
  • 소수인지 판별하는 함수 만들어 바로 출력
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)

📑  간단한 설명

  • 에라토스테네스의 체를 이용하여 소수를 구하면 되는 문제였다.
  • 어줍잖게 체를 따라하는 것보다, 그냥 기존에 있는 에라토스테네스의 체를 사용하는게 효율이 더 좋다...!

 

  • 번외 (다른 사람 답안인데 동일한 맥락인데 다른 방식임)
x, y = map(int, input().split())

for i in range(x, y+1):
    if i == 1:
        continue
    for j in range(2, int(i** 0.5)+1 ):
        if i%j==0:
            break
    else:
        print(i)