[Python] 약수 구하기 / 약수 개수 구하기 / 소수 여부 판단 (feat. 한방에 구하기)

해당 포스트에서는 Python에서 사용자가 입력한 숫자의 약수, 약수개수, 소수여부 판단 결과를 출력하는 방법을 설명합니다.

1. INTRO

최근 프로그래밍을 공부하시는 분들도 많아지고 공부를 시작하는 평균 연령도 많이 낮아진 것 같습니다. 많은 분들이 프로그래밍(코딩)을 배우기 시작하시면서 네이버 지식iN에도 질문글이 많이 올라오는데 비슷한 내용의 질문을 많이 받게되어 도움이 되고자 정리하게 되었습니다.

▲ 결과 출력 예시

2. 문제 풀이

이번 포스트에서 설명드릴 내용은 사용자에게 입력받은 숫자에 대한 약수/약수개수/소수여부 결과를 출력하는 것입니다. 아래 순서대로 코드를 풀어 설명드리겠습니다.

  1. 사용자에게 숫자 입력 받기
  2. 약수 및 약수 개수 구하기
  3. 소수 여부 판단하기

1. 사용자에게 숫자 입력 받기

먼저 사용자에게 숫자를 입력받는 부분입니다. while문과 try-except을 이용하여 사용자가 숫자가 아닌 다른 값을 입력할 경우 정상적인 값이 입력될 때까지 무한 반복되도록 구현하였습니다. 숫자(input_num)가 정상 입력되면 break로 반복이 종료됩니다.

Python Script

while True: 
    try: 
        input_num = int(input("숫자를 입력해주세요 : ")) 
        break; 
    except: 
        print("숫자만 입력하실 수 있습니다") 

2. 약수 및 약수 개수 구하기

약수를 구하는 부분입니다. 약수의 개수를 카운트 하기위한 count 변수를 0으로 초기화하였으며, for문에서는 변수 a1부터 input_num + 1까지 1씩 증가하며 사용자 입력값인 input_num을 나누게 됩니다. 만약 나눈값(input_num % a)의 나머지가 0이면 해당 숫자(a)를 반복적으로 출력하며 input_num + 1에 도달하면 반복은 종료됩니다.

반복문이 진행되며 입력한 숫자(input_num)에 대한 약수는 즉시 출력되며, 반복문이 종료한 후에는 카운트된 약수의 총 개수(count)를 출력합니다.

Python Script

count = 0 

print(input_num,"의 약수 : ", end='') 

for a in range(1, input_num+1): 
    if input_num == a: 
        print(a) 
        count += 1
    elif input_num % a == 0: 
        print(a, end=', ') 
        count += 1

print(input_num,"의 약수의 총 개수 : ", count)

3. 소수 여부 판단하기

소수(Prime Number) : 1보다 큰 자연수 중에서 1과 자기 자신만을 약수로 가지는 수

사용자가 입력한 숫자(input_num)가 소수(Prime Number)인지 판단하는 부분입니다. 위의 과정이 없이 입력한 숫자의 소수여부를 판단하는 경우 코드가 복잡해 질 수 있으나 위에서 구한 값들을 활용한다면 아래처럼 간단하게 구할 수 있습니다.

만약, 위 과정없이 소수를 구하는 방법이 궁금하신 분은 아래 링크를 보시면 됩니다.

Python Script

if count == 2: 
    print(input_num,"은(는) 소수(Prime Number)입니다") 
else: 
    print(input_num, "은(는) 소수(prime Number)가 아닙니다")

3. 전체 코드

위에서 설명드린 코드를 정리하면 아래와 같습니다. 필요한 부분만 추출해서 목적에 맞게 사용할 수 있도록 별도의 함수로 만들지는 않았습니다.

while True: 
    try: 
        input_num = int(input("숫자를 입력해주세요 : ")) 
        break; 
    except: 
        print("숫자만 입력하실 수 있습니다") 

count = 0 

print(input_num,"의 약수 : ", end='') 

for a in range(1, input_num+1): 
    if input_num == a: 
        print(a) 
        count += 1
    elif input_num % a == 0: 
        print(a, end=', ') 
        count += 1 

print(input_num,"의 약수의 총 개수 : ", count) 

if count == 2: 
    print(input_num,"은(는) 소수(Prime Number)입니다") 
else: 
    print(input_num, "은(는) 소수(prime Number)가 아닙니다")

4. 마무리

이번 포스트에서는 사용자가 입력한 숫자의 약수, 약수개수, 소수여부 판단 결과를 출력하는 방법을 소개하였습니다. 프로그래밍 공부를 하다보면 '약수를 구하시오', '약수의 개수를 구하시오', '소수 인지 판단하시오' 등의 비슷한 문제가 출제되는데 이번 포스트를 통해 한번에 개념을 정리하는 계기가 되셨으면 좋겠습니다.

5. 출처

[1] Problem 3 : 가장 큰 소인수 구하기


banner-request-analysis