본문 바로가기

IT프로그래밍

[Python]파이썬 약수 출력, 약수의 개수 구하기 소스코드 & 설명

파이썬에서 입력받은 수의 모든 약수와 약수의 개수를 출력 해보겠습니다.

 

이번 포스팅에서는 전에 포스팅한

파이썬에서 키보드 입력을 받는 방법(특정형으로 변환)

 

[Python]파이썬 입력 / Python 입력 / 파이썬 input / Python input

파이썬 입력 함수 : input C언어의 scanf와 같이 사용자에게 문자열을 입력받는 함수입니다. 소스코드와 설명을 통해 기본 적인 사용법 및 주의할 점 등을 말씀드릴께요 1. input() 소스코드 print("a에 할당할..

manniz.tistory.com

파이썬 조건문

 

[Python]파이썬 조건문(if문) 문법 및 사용법 정리

프로그래밍에서 조건문을 직관적으로 표현하자면 컴퓨터에게 질문을 던지고, 질문의 답(참/거짓)에 따라 수행해야할 경로를 지정해주는 것과 같습니다. 1. if문 대표적인 프로그래밍 조건문은 if문 입니다. c언어,..

manniz.tistory.com

파이썬 반복문

 

[Python]파이썬 for / Python for / 파이썬 반복문 / Python 반복문

파이썬 반복문 파이썬 for문 입니다. 파이썬의 반복문을 예제를 통해 알아보고 c와 비교하여 어떤점이 다른지, 또 어떻게 사용하는지 기록해놓은 포스팅입니다. 파이썬에는 크게 2가지의 반복문이 있습니다. 1. f..

manniz.tistory.com

 

이 3가지와 제일 핵심인 약수의 개수를 구하는 수학적 알고리즘을 대입하여 풀어보겠습니다.

 


1. 약수를 구할 숫자를 입력 받는다.

소스 코드

input_num = int(input("약수를 구할 숫자를 입력해주세요 : "))

input_num 이라는 변수를 생성합니다. 그리고 input을 통해 입력을 받으며, 그 안에 "약수를 구할 숫자를 입력해주세요"라는 문자열을 입력하여 print를 한번 더 해줄 필요가 없게 만듭니다.

그리고 int()를 통해 입력받은 값을 int형으로 변환 시켜 줍니다.

하지만!! 여기서 하나 문제가 발생할 여지가 발생합니다.

만약 키보드로 들어온 입력이 int가 아니라면(사용자의 실수 혹은 의도이든..) 해당 코드는

다음과 같은 에러를 발생시킬 것입니다.

 

에러 발생

에러의 내용은 입력 받은 Ten을 int형으로 변환 시킬 수 없다는 것입니다.

숫자를 입력하라고 했는데 그걸 입력하지 않은 사용자의 잘못이지 않냐고 할 수 있지만,

가능하면 이렇게 예상 가능한 에러에 대해 예외처리를 해주는게 좋습니다.

추후 포스팅할 파이썬의 try except문을 통해 처리하며, 관련 포스팅은 추후 기재후 링크를 달아놓겠습니다 >_<

 

예외 처리한 소스 코드

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

해당 코드에서는 사용자가 숫자(정확히는 정수)만을 입력 해야만 다음 단계로 넘어 갈 수 있으며

숫자가 아닌 다른 값을 입력하면 "숫자만 입력하실 수 있습니다"라는 문자열을 출력 후

다시 input_num에 사용자의 입력을 받는 함수로 돌아갑니다.

 

실행 결과


2. 반복문을 통해서 약수를 구한다.

x라는 수의 약수를 구하는 방식 중 제일 쉬운 방법은 직접 나눠 보는 것입니다.

그럼 어떤 수부터 나눌 것인가 ?

사람이 하나하나 손으로 계산하면 시간이 많이 걸리겠지만 프로그램을 사용하게 된다면

우리는 1부터 x까지 모두 직접 나눠보면서 약수를 구할 수 있습니다.(심지어 빠릅니다)

반복문과 모듈러 연산(%)을 사용하여 약수를 구해 보겠습니다.

 

소스 코드

for a in range(1, input_num+1 ):
    if input_num % a == 0:
        print(a,"(은)는 약수")

 

1부터 입력 받은 수까지 모든 수를 검사하는 알고리즘

 

실행 결과

 

 

모듈러 연산의 값이 을 갖는 모든 값들을 조건문에서 걸러내어 출력해줍니다.

여기에 count라는 변수의 값을 모듈러 연산 결과가 0 일때마다 1씩 증가시켜 약수의 개수를 

구현해 보겠습니다.

추가로 콘솔에 출력되는 결과 값도 바꿔보겠습니다

 

소스 코드

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)

 

count라는 변수를 통해서 반복문 수행중 모듈러 연산이 0 이되거나 자기 자긴을 만난(자기와 같은 수는 약수가 될 수 밖에 없기때문에) 경우에는 해당 변수를 +1 시켜서 약수의 개수를 구합니다.

 

실행 결과


마지막으로 전체 소스 코드와 결과 첨부하며 마칩니다.

 

전체 소스 코드

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)

 

실행 결과

 

여기서 구한 약수의 개수를 갖고 소수를 판별 하는 방법을 다음 포스팅에서 알아보도록 하겠습니다.

 

질의 및 지적은 댓글 부탁드립니다