카프리카 수(Karprekar number)
정수 중에는 특별한 이름이 붙은 수들이 많은데, 그 중에는 인도의 수학자 카프리카(Kaprekar)의 이름이 붙은 카프리카 수(Karprekar number)라는 것이 있는데, 카프리카 수는 다음과 같은 유래를 가지고 있다.
인도의 어느 지역에 있는 철도의 선로 옆에는 $3025km$라고 쓰인 이정표가 있었다. 그런데 어느 날 심한 폭풍우로 이 이정표가 쓰러지면서 두 동강이 났다. 그래서 이정표에 쓰여 있던 $3025$가 정확히 절반으로 잘려 $30$과 $25$로 나누어지게 되었다. 마침 이곳을 지나던 인도의 수학자 카프리카는 쓰러진 이정표의 두 숫자를 보고 재미있는 점을 발견했다. “$30+25=55$이고 $55^2=3025$이네. $55$는 제곱을 한 후에 반으로 나누어 더하면 원래의 수가 되는구나.” 그 후 사람들은 이와 같은 성질을 갖는 수를 카프리카 수라고 했다.
일반적으로 $d$ 자리의 카프리카 수의 정의는 아래와 같다.
따라서 정의에 따라 한자리의 카프리카 수는 $1$과 $9$뿐임을 알 수 있다.
카프리카 수를 좀 더 이해해 보기 위하여 두자리의 카프리카 수를 모두 구해보자. 먼저 $n$이 카프리카 수라 해 보자. 그러면 $n^2 = 100a + b$라 나타낼 수 있다. 여기서 $a$와 $b$는 모두 두자리 이하의 정수이고 다음을 만족한다.
\[ (a+b)^2 = 100x + y. \]
위 식을 $a$에 관하여 정리하면
\[ a^2 + 2ab - 100a + b^2 - b = a^2 + 2a(b-50) + (b^2 - b) = 0. \]
이 식을 만족하는 $a$는 정수여야 하므로 판별식 $D$가 완전제곱수여야만 한다. 이제 $D$를 구해보면
\[ D := (b-50)^2 - (b^2 - b) = 2500 - 99b. \]
먼저 $D$가 $0$보다 크거나 같아야 하므로 $b$는 $1$부터 $25$ 사이의 정수라는 것을 알 수 있다. 그 중 $D$가 완전제곱식이 되게 하는 $b$는 $1$과 $25$밖에 없다. 따라서 $b = 1$일 때 $a$를 계산하면 $a=98$이 되는데 ($a=0$은 문제의 조건에 맞지 않으므로 제외), 이 경우 $n = 98 + 1 = 99$가 카프리카 수라는 사실을 알 수 있다. 또한 $b = 25$일 때 $a$를 계산하면 $20$ 혹은 $30$이 나온다. 따라서 $n = 45$와 $n=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$는 카프리카 수의 자릿수를 나타낸다. 이제 $d$에 $1$부터 $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에서 찾을 수 있다.
'Others > Matlab' 카테고리의 다른 글
Problems and Solutions #033 [Matlab 코드] (0) | 2017.07.01 |
---|---|
1 부터 9 까지의 숫자를 이용하여 1 부터 1000 만들기 [Matlab 코드] (0) | 2016.09.02 |
1 부터 9 까지의 숫자를 이용하여 100 만들기 [Matlab 코드] (0) | 2016.09.02 |
[해답] 특별한 10자리 숫자 (Matlab 코드) (0) | 2016.08.10 |
Problems and Solutions #006 [Matlab 코드] (0) | 2016.08.03 |