カプレカ数とは
まず6174を例にとってみます。
’6’、’1’、’7’、’4’と桁を関係なく数字をバラバラにします。
その数字の並び替えを[最大]と[最小]になるように並び替えます。
・最大 7641(3番、1番、4番、2番に並び替え)
・最小 1467(2番、4番、1番、3番に並び替え)
その後 [最大]ー[最小]=元の数字 になるものがカプレカ数となります。
7641ー1467=6174
※4桁はこの数字以外は存在しません。
考え方は実にシンプル
退屈なことはPythonにやらせよう 第2版 ―ノンプログラマーにもできる自動化処理プログラミング
一個ずつ計算して証明してみる
めんどくさすぎなのでpythonで書いてみます。
(学習題材としては良い課題になるのではないかと)
import copy
num=0
while num<=99999999999999999999: #20桁求めてみる
n=[]
for i in range(len(str(num))):
n.append(str(num)[i])
n.sort() #並び替え(小さい順)
s=copy.copy(n)
n.sort(reverse=True) #並び替え(大きい順)
s=(''.join(s)) #リスト内の並び替えた数字を1つの数列へ
n=(''.join(n)) #リスト内の並び替えた数字を1つの数列へ
kap=int(n)-int(s) #最大ー最小
if kap==num: #カプレカ数なのか判断
print(num)
num+=1
簡単に書いてみた。
出力結果
0 495 6174 549945 631764
やけに少ないと思った方もいると思います。
もちろん全てではないです。
数秒で5個は出てきますが、そのあとは時間がかかりすぎるので途中でやめました。
5分回しても6個目が出てこない、20桁なんて夢でした・・・
時間をかければでますが、何か別の法則で求めないと無理そうですね。
需要はなさそうだけど備忘録として保存しておきます。
専門家ではないので、何か誤りなど見つけた方ご指摘いただけると助かります。