1. 문제 링크
https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
2. 나는 어떻게 생각했는가?
m, n = map(int, input().split())
for i in range(m, n + 1):
  count = 0
  for j in range(2, i + 1):
    if i % j == 0:
      count += 1
      if count > 1:
        break
  if count == 1:
    print(i)- 우선 단순 무식하게 접근해보았다.
- 역시나 시간초과가 발생했다.

- 그래서 이전에 배웠던 제곱근을 이용한 방법과 메소드를 만드는 방법을 사용하기로 했다.
def check_yaksoo(n):
  if n == 1:
    return False
  else:
    for i in range(2, int(n ** 0.5) + 1):
      if n % i == 0:
        return False
    return True
m, n = map(int, input().split())
for i in range(m, n + 1):
  if check_yaksoo(i):
    print(i)
3. 정답 코드
# n 이하의 체를 구하는 함수
def prime(n):
    #0과1은 소수가아니므로 False, 나머지 2부터 n까지는 n-1개임
	seive = [False, False] + [ True ] * (n-1)
	k = int(n ** 0.5)
	#2~ 루트n + 1까지
	for i in range(2, k+1):
		if seive[i]:
			for j in range(i+i, n+1, i):
				seive[j] = False
	return [ i for i in range(2, n+1) if seive[i] == True]
    
m, n = map(int, input().split())
prime_list = prime(n)
for i in prime_list:
	if i < m:
		continue
	print(i)- 내가 작성한 방식의 코드보다 더 빠르고 강력한 방법이 있다.
- 바로 '에라토스테네스의 체'라는 방법이다.
- 자세한 설명은 직접 공부해 보는게 좋을 것 같다.
- 아래의 링크를 확인하기를 바란다.
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
https://leedakyeong.tistory.com/entry/python-소수-찾기-에라토스테네스의-체
[python] 소수 찾기 - 에라토스테네스의 체
파이썬으로 소수찾기 by 에라토스테네스의 체 소수를 찾는 방법 중 가장 효율적인 것으로 유명한 방법이 바로 "에라토스테네스의 체" 이다. 그 방법은 다음과 같다. 찾고자 하는 수(n) 까지 True로
leedakyeong.tistory.com
'Algorithm > 알고리즘 문제풀이' 카테고리의 다른 글
| 백준 9020 파이썬 - 골드바흐의 추측 (0) | 2021.08.14 | 
|---|---|
| 백준 4948 파이썬 - 베르트랑 공준 (0) | 2021.08.14 | 
| 백준 11653 파이썬 - 소인수분해 (0) | 2021.08.12 | 
| 백준 2581번 파이썬 - 소수 (0) | 2021.08.12 | 
| 백준 1978번 파이썬 - 소수 찾기 (0) | 2021.08.12 | 
 
										
									 
										
									 
										
									
댓글