Notice
Recent Posts
Recent Comments
Link
just inside
[백준] Silver 3. 1929 - 소수구하기 python 본문
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
'coding test > 구현' 카테고리의 다른 글
[백준] Bronze 2. 2292 - 벌집 python (0) | 2024.07.12 |
---|---|
[백준] Silver 5. 1676 - 팩토리얼 0의 개수 python (0) | 2024.07.12 |
[백준] Bronze 2. 1978 - 소수 찾기 python (1) | 2024.07.11 |
[백준] Bronze 3. 30802 - 웰컴 키트 python (1) | 2024.07.10 |
[백준] Silver 5. 1181 - 단어 정렬 python (1) | 2024.07.09 |