백준 알고리즘 문제 풀이 [Python]

[백준/Python] 1929번 소수 구하기 (기본수학2)

wlalsu_u 2023. 2. 25. 01:59

1929번 : 소수 구하기 문제

 

 

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

 

 

 

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())

for i in range(m, n+1):

    if i == 1:
        continue

    for j in range(2, int(i ** 0.5) +1):
        if i % j == 0:
            break

    else:
        print(i)

 

 

m, n = map(int, input().split())

 

 

- 공백으로 입력되는 두 자연수를, 변수 m, n 에 저장

 

- 정수가 공백으로 나누어 입력되므로, input().split() 으로 문자열을 공백으로 나뉜 리스트로 변환

 

- map 을 이용하여 리스트의 모든 원소에 int() 함수를 적용

 

 

 

for i in range(m, n+1):

 

 

- m 이상 n 이하의 소수를 찾아야 하므로, for 반복문 사용

 

- range() 를 사용하여 m 부터 n 까지 for 문을 반복

 

- i의 값으로 m 부터 n 까지 순차적으로 들어감

 

 

 

if n == 1:    /    continue

 

 

- 입력받은 정수 n 이 1인 경우

 

- m, n 이 모두 1인 경우 이므로, m 과 n 사이에 소수가 존재하지 않음

 

- continue 를 사용하여, 프로그램의 흐름이 반복문의 처음으로 돌아가도록 함

 

 

 

for j in range(2, int(i ** 0.5) +1):

 

 

- (수) ** 0.5 를 통해 특정 수의 제곱근을 구할 수 있음

 

- i의 제곱근까지 나누어 떨어지는 수가 있는지 판별

 

- range() 를 사용하여 2부터 i^0.5 까지 for 문을 반복

 

- i 값으로 2 부터 i^0.5 까지 들어감

 

- 1보다 큰 자연수로 나누어야 하므로, 2부터 시작

 

 

+ 참고 )

파이썬에서 ' ** ' 기호를 사용하여 제곱을 표현
예시 ) 2 ** 5 == 2의 5제곱 == 32

파이썬 내장 함수인 pow 를 사용할 수도 있음
예시) pow(2, 5) == 2의 5제곱 == 32

 

 

 

if i % j == 0:    /    break

 

 

- i 를 j 로 나누었을 때, 나누어 떨어지는 경우 소수가 아님

 

- 더 이상 소수인지 판별하지 않아도 되므로, break 로 for문을 빠져나감

 

 

 

else:    print(i)

 

 

- i 가 1이 아닌 경우

 

- 소수인 숫자 i 를 출력

 

 

 

 

 

 

 

나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.

https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC