Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 주어진 범위 내 카프리카 수(Kaprekar Number) 찾는 방법

카프리카 수(Kaprekar Number)는 독특한 성질을 지닌 양의 정수입니다. 수정된 카프리카 수(modified Kaprekar number)란 d자리 양의 정수 n 가운데, 제곱한 결과를 두 부분으로 나누었을 때 오른쪽 조각 r(d자리)과 왼쪽 조각 l(남은 d 또는 d−1자리)의 합이 원래 수와 같아지는 수를 말합니다(즉, l + r = n).

가장 대표적인 예는 45입니다. 45의 제곱인 2025를 20과 25로 나누면 20 + 25 = 45가 되므로 45는 카프리카 수에 해당합니다.

주어진 범위 내에서 카프리카 수 찾기

범위 안의 모든 수를 하나씩 검사하면서 위 조건을 만족하는지 확인하면 해당 구간의 카프리카 수를 모두 찾을 수 있습니다. 구체적인 절차는 다음과 같습니다.

  1. 숫자를 제곱한 뒤 문자열로 변환합니다.
  2. 문자열을 가능한 모든 위치에서 왼쪽 조각과 오른쪽 조각으로 나눕니다.
  3. 두 조각을 정수로 변환해 더한 값이 원래 수와 같은지 비교합니다.
  4. 조건이 성립하면 해당 숫자를 카프리카 수로 출력합니다.

오른쪽 조각 앞에 0이 붙는 경우에도 int() 함수가 자동으로 처리하므로 계산에는 문제가 없습니다.

예제 코드

def print_Kaprekar_nums(start, end):
    for i in range(start, end + 1):
        # 제곱한 값의 자릿수를 문자열로 저장
        sqr = i ** 2
        digits = str(sqr)

        # 1부터 (자릿수 길이 - 1)까지 반복하며 좌우 조각을 더해 확인
        length = len(digits)
        for x in range(1, length):
            left = int("".join(digits[:x]))
            right = int("".join(digits[x:]))
            if (left + right) == i:
                print("Number:", i, "| Left:", left, "| Right:", right)

print_Kaprekar_nums(150, 8000)

실행 결과

위 코드를 150부터 8000까지의 범위에서 실행하면 다음과 같은 결과가 출력됩니다.

Number: 297 | Left: 88 | Right: 209
Number: 703 | Left: 494 | Right: 209
Number: 999 | Left: 998 | Right: 1
Number: 1000 | Left: 1000 | Right: 0
Number: 2223 | Left: 494 | Right: 1729
Number: 2728 | Left: 744 | Right: 1984
Number: 4879 | Left: 238 | Right: 4641
Number: 4950 | Left: 2450 | Right: 2500
Number: 5050 | Left: 2550 | Right: 2500
Number: 5292 | Left: 28 | Right: 5264
Number: 7272 | Left: 5288 | Right: 1984
Number: 7777 | Left: 6048 | Right: 1729

결과 해석

예를 들어 297의 경우 297² = 88209이며, 이를 88과 209로 나누면 88 + 209 = 297이 되어 조건을 충족합니다. 마찬가지로 703² = 494209이므로 494 + 209 = 703 역시 성립합니다.

반면 999(998 + 1)나 1000(1000 + 0)처럼 한쪽 조각이 극단적으로 작거나 0이 되는 경계 사례도 함께 출력됩니다. 적용하는 정의에 따라 이러한 사례를 포함할지 제외할지는 구현 단계에서 결정하면 됩니다.