어떤 수 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
반응형
'Python > 코딩테스트' 카테고리의 다른 글
배열 - 기본 개념(리스트 slicing/append/pop/len) (0) | 2025.03.04 |
---|---|
다중반복문 - 소수 구하기(bloon 변수활용) (0) | 2025.03.04 |
다중반복문 - M번에 걸친 3N + 1 수열에서 N이 1이되는데 걸리는 횟수 (0) | 2025.03.04 |
다중반복문 - ab곱 N번 구하기 (0) | 2025.03.04 |
다중반복문 - n번반복하기 (0) | 2025.03.04 |