본문 바로가기
Python/코딩테스트

다중반복문 - 완전 수

by Nanki 2025. 3. 4.

어떤 수 n의 완전수 구해라
(진약수 : n을 나누어 떨어지게 하는 양수 중에서 n이 아닌 수.
이때 n의 진약수의 총합이 n과 같다면, n을 완전수라고 합니다.)

예로, 28의 진약수는 1,2,4,7,14이고 이들의 합은 28이므로, 28은 완전수이다.

문제: 두 정수 start, end가 주어진다.
start이상 end이하인 완전수의 갯수를 세는 프로그램을 작성해라. 

1. start이상 end까지의 정수를 순회하며 각 숫자의 약수의 합을 계산
2. 특정 숫자 n의 (자기 자신을 제외한) 약수의 합을 알아내기 위해 1부터 n-1까지의 숫자들로 n을 나눠보며 나머지가 0인 수들을 구한다.
3. 2에서 구한 수들의 합을 계산한다.
4. 조건문을 주어 약수의 합이 n이면 정답 갯수를 1 증가 시켜준다.

 

start, end = map(int, input().split())
perfect_count = 0  
for num in range(start, end+1):  # 
    sum_divisors = 0  
    for divisor in range(1, num):  
        if num % divisor == 0:
            sum_divisors += divisor
    if sum_divisors == num:
        perfect_count += 1
print(perfect_count)

 

문제 출처 : 코드트리

https://www.codetree.ai/trail-info

반응형