카프리카 수(Kaprekar number)

written by jjycjn   2017. 7. 1. 03:31

카프리카 수(Karprekar number)

정수 중에는 특별한 이름이 붙은 수들이 많은데, 그 중에는 인도의 수학자 카프리카(Kaprekar)의 이름이 붙은 카프리카 수(Karprekar number)라는 것이 있는데, 카프리카 수는 다음과 같은 유래를 가지고 있다.


인도의 어느 지역에 있는 철도의 선로 옆에는 3025km라고 쓰인 이정표가 있었다. 그런데 어느 날 심한 폭풍우로 이 이정표가 쓰러지면서 두 동강이 났다. 그래서 이정표에 쓰여 있던 3025가 정확히 절반으로 잘려 3025로 나누어지게 되었다. 마침 이곳을 지나던 인도의 수학자 카프리카는 쓰러진 이정표의 두 숫자를 보고 재미있는 점을 발견했다. “30+25=55이고 552=3025이네. 55는 제곱을 한 후에 반으로 나누어 더하면 원래의 수가 되는구나.” 그 후 사람들은 이와 같은 성질을 갖는 수를 카프리카 수라고 했다.


일반적으로 d 자리의 카프리카 수의 정의는 아래와 같다.


정의. 카프리카 수(Kaprekar number) d 자리의 양의 정수 n에 대하여, 두 정수 0<a,b<10d가 존재하여 n이 아래의 두 조건을 만족하면 카프리카 수라 한다.

n2=a10d+b,n=a+b.


따라서 정의에 따라 한자리의 카프리카 수는 19뿐임을 알 수 있다.


카프리카 수를 좀 더 이해해 보기 위하여 두자리의 카프리카 수를 모두 구해보자. 먼저 n이 카프리카 수라 해 보자. 그러면 n2=100a+b라 나타낼 수 있다. 여기서 ab는 모두 두자리 이하의 정수이고 다음을 만족한다.

(a+b)2=100x+y.

위 식을 a에 관하여 정리하면

a2+2ab100a+b2b=a2+2a(b50)+(b2b)=0.

이 식을 만족하는 a는 정수여야 하므로 판별식 D가 완전제곱수여야만 한다. 이제 D를 구해보면

D:=(b50)2(b2b)=250099b.

먼저 D0보다 크거나 같아야 하므로 b1부터 25 사이의 정수라는 것을 알 수 있다. 그 중 D가 완전제곱식이 되게 하는 b125밖에 없다. 따라서 b=1일 때 a를 계산하면 a=98이 되는데 (a=0은 문제의 조건에 맞지 않으므로 제외), 이 경우 n=98+1=99가 카프리카 수라는 사실을 알 수 있다. 또한 b=25일 때 a를 계산하면 20 혹은 30이 나온다. 따라서 n=45n=55가 카프리카 수라는 것을 알 수 있다. 따라서 두자리의 카프리카 수는 45,55,99의 세개뿐임을 알 수 있다.


Matlab 코드

이 문제도 Matlab를 이용하여 간단히 해결할 수 있다. 먼저 문제를 해결하는데 이용한 Matlab 코드는 아래와 같다.

function [] = KaprekaNumber(d)
for n = 10^(d-1) : 10^d - 1
    x = n^2;
    a = floor(x/10^d);
    b = rem(x, 10^d);
    if a+b == n
        format = ('%d : %d^2 = %0*d,  %0*d + %0*d = %d\n');
        fprintf(format, n, n, 2*d, x, d, a, d, b, n);
    end
end
end

여기서 함수의 입력변수인 d는 카프리카 수의 자릿수를 나타낸다. 이제 d1부터 5까지의 값을 넣어가면서 모든 카프리카 수를 출력해보면,

>> KaprekaNumber(1)
1 : 1^2 = 01,  0 + 1 = 1
9 : 9^2 = 81,  8 + 1 = 9

>> KaprekaNumber(2)
45 : 45^2 = 2025,  20 + 25 = 45
55 : 55^2 = 3025,  30 + 25 = 55
99 : 99^2 = 9801,  98 + 01 = 99

>> KaprekaNumber(3)
297 : 297^2 = 088209,  088 + 209 = 297
703 : 703^2 = 494209,  494 + 209 = 703
999 : 999^2 = 998001,  998 + 001 = 999

>> KaprekaNumber(4)
2223 : 2223^2 = 04941729,  0494 + 1729 = 2223
2728 : 2728^2 = 07441984,  0744 + 1984 = 2728
4950 : 4950^2 = 24502500,  2450 + 2500 = 4950
5050 : 5050^2 = 25502500,  2550 + 2500 = 5050
7272 : 7272^2 = 52881984,  5288 + 1984 = 7272
7777 : 7777^2 = 60481729,  6048 + 1729 = 7777
9999 : 9999^2 = 99980001,  9998 + 0001 = 9999

>> KaprekaNumber(5)
17344 : 17344^2 = 0300814336,  03008 + 14336 = 17344
22222 : 22222^2 = 0493817284,  04938 + 17284 = 22222
77778 : 77778^2 = 6049417284,  60494 + 17284 = 77778
82656 : 82656^2 = 6832014336,  68320 + 14336 = 82656
95121 : 95121^2 = 9048004641,  90480 + 04641 = 95121
99999 : 99999^2 = 9999800001,  99998 + 00001 = 99999

참고로 카프리카 수들의 목록은 OEIS의 수열 A006866에서 찾을 수 있다.

  ::  
  • 공유하기  ::