Research Notes

[Python Practice] While, If Statement - Find factors 본문

Programming Language/Python

[Python Practice] While, If Statement - Find factors

jiachoi 2023. 7. 3. 16:35

<Question>

# 정수 n의 약수는 n을 나누었을 때 나누어 떨어지는 수입니다. 만약 정수 i가 정수 n의 약수라면, ni로 나누었을때 나머지가 0이 나와야 합니다.

# 자연수 중 120의 약수를 모두 출력하고, 총 몇개의 약수가 있는지 출력하는 프로그램을 써보세요.

# 이와 같이 출력하세요
1 
2
3 
4 
5 
6 
8 
10 
12 
15 
20 
24 
30 
40 
60 
120 
120의 약수는 총 16개입니다.

 

<Answer>

n = 120
i = 1
count = 0

while i<=n:
    if n%i==0:
        print(i)
        count = count + 1
    i = i + 1

print("120의 약수는 총 %d개 입니다." %(count))

<Explanation>

이 문제를 풀기 위해선 1. 약수 뽑아내기 2.약수 개수 알아내기를 해야한다.

1. 약수 뽑아내기

문제는 120의 약수지만 풀때는 결과값이 바로바로 나오도록 8의 약수를 뽑아내는 것으로 구상하였다.

일단 필요한것은 정수n, 약수 i 가 있다. 문제에서와 같이 n을 i 로 나눴을때 나머지가 0이면 i는 n의 약수 이다.

이를 통해 ( n % i == 0 ) 이라는 조건식을 만들어 낼 수 있다. 이 조건식은 if 절을 사용하여 나타낼 수 있다.

while문을 사용하여 반복할 수 있도록 반복문을 돌려야 한다.

또한 약수인 i 는 정수 n보다 크면 안되기 때문에 while 문의 조건절에서 i<=n 이라는 조건을 줘야 한다. (이는 i>n 이 되면 값이 False가 되기 때문에 반복문을 멈추게 하는 조건이다. )

여기까지 약수를 뽑아내기 위한 간략한 설명이다. 이를 코드화 하면 아래와 같다.

# 약수 뽑아내기
n = 8
i = 1

while i<=n :
    if n%i==0 :
        print(i)
    i = i + 1

2. 약수의 개수 알아내기

약수의 개수를 나타낼 변수를 하나 더 지정하여야 한다. 나는 count라는 변수를 지정하였고 초기 값은 0으로 설정하였다.

또한 약수가 한개씩 나올때, 즉 i가 출력될때마다 count 는 +1 개가 되어야 한다. 이를 통해 count = count + 1 이라는 식이 만들어 진다. 이는 if 절이 수행 되는 곳에 있어야 하므로 이의 하위 수행부분으로 들어간다.

( 추가할 부분 - count = 0 / count = count + 1 / 맨 마지막 count 출력부분)

n = 8
i = 1
count = 0

while i<=n :
    if n%i == 0:
        print(i)
        count = count + 1
    i = i + 1

print("8의 약수는 총 %d개 입니다." %(count))

정답은 n = 8 을 n = 120 으로 하면 같은 결과가 나온다.

출력화면