[ 소수란? ]
소수란
1보다 큰 자연수 중
1과 자기 자신만을 약수로 가지는 수
입니다.
예를들어
숫자 5는 약수를 1과 5
즉 1과 자기 자신만을 약수로 갖고 있으므로
소수입니다.
숫자 4의 약수는 1, 2, 4 이므로
소수가 아닙니다.
[ 소스코드 ]
def is_prime(n):
if n < 2 :
return "소수가 아닙니다."
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return "소수가 아닙니다."
return "소수입니다."
print(is_prime(5))
[ 코드설명 ]
여기부터는 관심있으신 분들께서만 보시면 될 것 같습니다.
is_prime(n) 함수는
숫자를 입력 받아 소수인지를 확인하는 함수입니다.
먼저 소수는 1보다 큰 자연수 중에 존재하므로
2 미만의 수는 소수가 아닙니다.
if n < 2 :
return "소수가 아닙니다."
다음 구문을 보시기 전에
만약 range() 함수를 모르신다면 여기를 먼저 확인하시기 바랍니다.
아래 코드는 소수를 구하는 가장 중요한 코드입니다.
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return "소수가 아닙니다."
위 코드는 숫자 2부터
입력받은 값의 0.5 거듭제곱을 한 뒤 1을 더한 수까지
반복을 합니다.
0.5 거듭제곱은 수학의 루트와 같습니다.
range() 함수의 특성때문에 [ +1 ]을 하게 됩니다.
그리고 그 숫자 중 하나로 나누어지게 되면
그 숫자는 소수가 아니게 됩니다.
그리고 어떠한 수로도 나누어 지지 않으면
소수이게 됩니다.
range(2, int(n**0.5)+1)는
소수 판별 알고리즘의 효율성을 높이기 위한 코드입니다.
소수를 판별할 때,
2부터 n까지의 모든 수로 n을 나누어 보는 방법은 비효율적입니다.
왜냐하면 n이 소수가 아니라면,
그 약수는 반드시 √n 이하에 존재하기 때문입니다.
예를 들어,
36의 약수를 생각해보면 [ 1, 2, 3, 4, 6, 9, 12, 18, 36 ]이 있습니다.
이 중 √36인 6 이상의 약수(9, 12, 18, 36)는
모두 다른 약수(4,3,2,1)와 곱해져서 36이 되므로,
√n 이하의 수만 검사해도 충분합니다.
따라서 range(2, int(n**0.5)+1)는
2부터 √n까지의 범위를 생성하여
n이 소수인지 판별하는 데 필요한 연산을 줄입니다.
이렇게 하면 특히 큰 수에 대해 소수를 판별할 때
시간을 크게 절약할 수 있습니다.
def is_prime(n):
if n < 2 :
return "소수가 아닙니다."
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return "소수가 아닙니다."
return "소수입니다."
print(is_prime(12345679879864564654654))
[ 12345679879864564654654 ] 라는 숫자는 소수가 아니라고 합니다.
[ 1112231232133333377773 ] 라는 숫자도 소수가 아니라고 합니다.
여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.
'파이썬(Python)' 카테고리의 다른 글
[ Pandas ] 판다스(Pandas)를 사용해 엑셀 특정시트, 여러 시트, 모든시트의 값 불러오기 (0) | 2023.11.04 |
---|---|
[ Pandas ] 판다스(Pandas) 엑셀 파일 읽기, 판다스(Pandas) 엑셀 파일 불러오기 (0) | 2023.11.02 |
[ Basic ] 파이썬 참과 거짓, Python True and False (0) | 2023.10.10 |
[ Basic ] 파이썬 if, elif, else: 프로그래밍 초보자를 위한 if 문 가이드 (1) | 2023.10.02 |
[ 프로그램 ] 한글문서(hwp, hwpx) 합치기 프로그램 (0) | 2023.08.24 |