카프리카 수(Karprekar number)
정수 중에는 특별한 이름이 붙은 수들이 많은데, 그 중에는 인도의 수학자 카프리카(Kaprekar)의 이름이 붙은 카프리카 수(Karprekar number)라는 것이 있는데, 카프리카 수는 다음과 같은 유래를 가지고 있다.
인도의 어느 지역에 있는 철도의 선로 옆에는
일반적으로
따라서 정의에 따라 한자리의 카프리카 수는
카프리카 수를 좀 더 이해해 보기 위하여 두자리의 카프리카 수를 모두 구해보자. 먼저
위 식을
이 식을 만족하는
먼저
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
여기서 함수의 입력변수인
>> 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 |