Study/알고리즘

[백준] 1929번_소수구하기

혤리 2020. 2. 9. 23:10

문제 링크 : https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)

www.acmicpc.net

def print_prime(i):
    if i >= 2:
        for k in range(2,int(i**0.5)+1):
            if i%k==0:
                return
        print(i)
        return
m,n = map(int,input().split())
for i in range(m,n+1):
    print_prime(i)

isPrime 함수를 만들어서 True, False 반환한 다음에 main부분에서 출력해도 되지만 그냥 바로 출력하는 함수를 만들어보았다.

def sieve(n):
    prime = []
    check = [False for _ in range(n+1)] # 지워졌으면 True
    i = 2
    while i<=n:
        if not check[i]:
            prime.append(i)
            j = i+i
            while j<=n:
                check[j] = True
                j += i
        i+=1
    return prime

a,b = map(int,input().split())
prime_arr = sieve(b)
for p in prime_arr:
    if a<=p<=b:
        print(p)
    

에라토스테네스의 체를 이용하여 더욱 빠르게 문제를 해결했다.