- 문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
1. 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
2. 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
- 코드
# 입력부
start,end=map(int,input().split());
# 처리부
def isprime(k):
if(k==1):
return 0;
for i in range(2,int(k**(1/2))+1,1):
if(k%i==0):
return 0;
return 1;
# 출력부
for i in range(start,end+1):
if(isprime(i)==1):
print(i);
- 문제 풀이
에라토스테네스의 체로 문제를 푼다면, 시간 초과가 날 것이다.
(2부터 n까지 다 대입해서 나누기 때문에 숫자가 커질 수록 소요시간이 오래 걸린다.)
아까전 풀었던 코드를 그대로 가져와 start, end만 지정해서 풀었더니 시간 초과가 되었다.
# 입력부
start,end=map(int,input().split());
# 처리부
def isprime(k):
if(k==1):
return 0;
for i in range(2,k,1):
if(k%i==0):
return 0;
return 1;
# 출력부
for i in range(start,end+1):
if(isprime(i)==1):
print(i);
그렇다면 복잡도를 낮출 필요가 있다.
학기 중 교수님께서, 시간 복잡도를 낮추려면 범위를 int(루트배)+1만큼 하면 시간이 줄어들 것이라고 말씀하셨다.
그 때 간단하게 원리를 말씀해 주셨는데, 과정은 이해하지 못했고 결과만 기억하고 있던게 떠올랐다.
교수님께서 학년이 올라가면 알게 될 거라고 말씀하셨다. (교수님,, 학년이 올라가면 차차 이해 해 볼게요 ㅠㅠ...)
그렇게 해서 풀었는데 통과했다.
- 여담
한 학기 동안 교수님한테 배운거 써 먹을 때마다 기분이 좋다.
뭔가 공부하는 느낌이 들기도 하고, 뭔가 영화 같은 곳에서 처음에 뿌린 퍼즐들이 영화 끝에서 하나씩 맞춰지는 느낌이랄까..
| 코드가 이상하거나, 이해가 되지 않는 부분은 언제든 댓글 남겨주세요! :) |
'Programming > Python' 카테고리의 다른 글
| [백준] 10162번 : 전자레인지 (Python / 파이썬) (0) | 2023.01.02 |
|---|---|
| [백준] 2576번 : 홀수 (Python / 파이썬) (0) | 2023.01.01 |
| [백준] 1978번 : 소수 찾기 (Python / 파이썬) (0) | 2023.01.01 |
| [백준] 10872번 : 팩토리얼 (Python / 파이썬) (0) | 2023.01.01 |
| [백준] 2577번 : 숫자의 개수 (Python / 파이썬) (0) | 2023.01.01 |