728x90
https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
for문을 돌려가며 각 수를 소수인지 아닌지 판별하는 방법은 시간복잡도가 O( (N-M)² ) 이므로 M=1, N=1,000,000인
경우에는 시간초과가 난다. 그러므로 '에라토스테네스의 체'를 변형해서 2 ≤ i ≤ N+1, 2 ≤ j ≤ N+1(i*j ≤ N) 의 범위에서
bool리스트[i*j]=False로 지정해주면 된다.
에라토스테네스의 체에 관한 내용은 아래 링크에 있다.
[이론] 에라토스테네스의 체
채로 걸러내는 것과 같이 어떤 수가 소수로 판정되면 어떤 수에 1을 제외한 나머지 수를 곱한 것은 모두 합성수이기 때문에 이들을 모두 제거하고 남아있는 수 중 다음으로 작은 수에 1을 제외한
ujoon.tistory.com
코드는 아래에 있다.
더보기
M,N=map(int,input().split())
isPrime=[True]*(N+1)
isPrime[1]=False
for i in range(2,N+1):
for j in range(2,N+1):
if i*j>N:
break
isPrime[i*j]=False
for i in range(M,N+1):
if isPrime[i]:
print(i)
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[python][BOJ15973] 두 박스 (0) | 2023.02.18 |
---|---|
[python][BOJ1225] 이상한 곱셈 (0) | 2023.02.13 |
[python][BOJ2373] Fibonacci Game (0) | 2023.02.12 |
[python][BOJ2422] 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2023.02.11 |
[python][BOJ1380] 1380 귀걸이 (0) | 2023.02.09 |
댓글