1929 - 소수 구하기
문제 설명
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
제출 코드
1차 제출 코드
from sys import stdin
def isPrime(x):
if x < 1:
return False
else:
for i in range(2, x+1):
if x % i == 0:
return False
return True
m,n = map(int, stdin.readline().split())
for i in range(m, n+1):
if isPrime(i): print(i)
위 코드는 테스트케이스는 만족하나 시간 초과가 뜬다.
최종 제출 코드
from sys import stdin
def isPrime(x):
if x == 1 :
return False
for i in range(2, int(x ** 0.5)+1):
if x % i == 0:
return False
return True
m,n = map(int, stdin.readline().split())
for i in range(m, n+1):
if isPrime(i): print(i)
문제풀이
x가 소수인지 확인하기 위해서는 2~x/2 까지 나누어 보는것이 효율적이라는 것을 이번 문제를 통해 알게되었다.
x의 약수는 자기자신을 제외하고는 가장 작은 배수가 2인 점에 따라서 x/2 보다 클 수 없으므로 2부터 x의 제곱근까지 살펴보면 된다.
따라서, 2부터 x의 제곱근까지 순회하며 소수 여부를 판별하는 함수를 정의하고 입력값 m~n까지 순회하며 소수일 경우 해당 값을 출력하도록 한다.
'Algorithm & SQL > Baekjoon' 카테고리의 다른 글
[Algorithm] [Python] 백준/BOJ - 9095 _ 1, 2, 3 더하기 (0) | 2020.05.26 |
---|---|
[Algorithm] [Python] 백준/BOJ - 11724 _ 연결 요소의 개수 (0) | 2020.05.24 |
[Algorithm] [Python] 백준/BOJ - 1373 _ 2진수 8진수 (0) | 2020.05.22 |
[Algorithm] [Python] 백준/BOJ - 10808 _ 알파벳 개수 (0) | 2020.05.20 |
[Algorithm] [Python] 백준/BOJ - 11652 _ 카드 (0) | 2020.05.20 |