알고리즘/백준
[Python] 백준 파이썬 1929 소수 구하기
dding96
2022. 9. 4. 15:55
https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
두 자연수 사이의 소수를 구해서 각각 출력하는 문제입니다.
문제 자체는 간단했습니다.
m, n = map(int, input().split())
# m부터 n까지 정수들의 리스트를 만들어줌
num = list(range(m, n+1))
if 1 in num:
num.remove(1) # 1은 소수가 아니니까 삭제
prime=[] # 소수들을 담을 리스트 하나 생성
for i in num:
error = 0
for j in range(2, i): # 리스트 안의 수 각각 2 ~ (본인-1) 까지 나눠줌
# 나누어 떨어지면 소수가 아니니까 error + 1 해줌
if i % j == 0:
error += 1
# 에러가 0인 애들은 소수니까 prime리스트에 추가
if error == 0:
prime.append(i)
# 한 줄씩 출력
for p_num in prime:
print(p_num)
처음에 이렇게 했는데 시간 초과가 떴습니다.... ㅜ.ㅜ
그래서 찾아보니까 2 ~ 본인-1 수까지 나눠줄 때 자기 자신의 제곱근 까지만 확인 해주면 된다고 하더라구요? 그래서 코드를 수정하고 올려서 통과했습니다.
m, n = map(int, input().split())
for i in range(m,n+1):
if i == 1:
continue
error = 0
for j in range(2, int(i**0.5)+1): # 굳이 모든 수에 대해서 나눌필요 없음. 제곱근까지만 해도 됨
if i % j == 0:
error += 1
break
if error == 0:
print(i)
쓸데없는 리스트 생성하고 뭐 지우고 하는 과정도 다 뺐습니다. 최대한 필요한 것만 써야할텐데... 아직 많이 부족합니다. ㅜ.ㅜ