출처: www.acmicpc.net/problem/1929
결과
풀이 1번 (제곱근 활용)
def isPrime(num):
if num == 1 : return False
root = int(num ** .5)
for k in range(2, root+1):
if num % k == 0:
return False
return True
M, N = map(int, input().split())
for n in range(M, N+1):
if isPrime(n):
print(n)
풀이 2번 (에라토스테네스의 체 활용)
def get_primes(m, n):
sieve = [True] * (n+1)
sieve[1] = False
k = int(n ** .5)
for i in range(2, k+1):
if sieve[i]:
for j in range(i+i, n+1, i):
sieve[j] = False
return [w for w in range(m, n+1) if sieve[w]]
M, N = map(int, input().split())
S = get_primes(M, N)
for s in S:
print(s)
분석
- 1은 소수가 아닌데 이를 고려하지 않아서 틀렸다.
난이도가 쉬운 문제임에도 코드가 잘못된 줄 알고 조마조마했다.
- 풀이 1번(제곱근 활용)에 비해 풀이 2번(에라토스테네스의 체 활용)의 효율이 훨씬 좋았다 (약 10배 정도..)
시간제한이 엄격한 문제에서는 에라토스테네스의 체를 활용해야겠다
'> 알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글
[Python] 1120-문자열 (0) | 2020.11.04 |
---|---|
*[Python] 12865-평범한 배낭 (0) | 2020.10.27 |
[Python] 1026-보물 (0) | 2020.10.27 |
*[Python] 1904-01타일 (0) | 2020.10.26 |
[Python] 13300-방 배정 (0) | 2020.10.26 |
댓글