본문 바로가기
프로그래밍/Python

[python][BOJ1929] 소수 구하기

by 김아잉 2023. 2. 10.
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로 지정해주면 된다.

 

에라토스테네스의 체에 관한 내용은 아래 링크에 있다.

https://ujoon.tistory.com/7

 

[이론] 에라토스테네스의 체

채로 걸러내는 것과 같이 어떤 수가 소수로 판정되면 어떤 수에 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

댓글