ちなみに、中国語では「自守数」。
英語版 Wikipedia にある別名、Circular number の方が数字の並びをあらわしている。
用語はともかく、プログラムを書いて実際 0 からはじめて1つずつ順に大きな桁まで計算するとなかなかこれは実行時間がかかった。
単純なプログラムで、なんとか風呂に入ってる間くらいで計算できたのは、
0 Automorphic
1 Automorphic
5 Automorphic
6 Automorphic
25 Automorphic
76 Automorphic
376 Automorphic
625 Automorphic
9376 Automorphic
90625 Automorphic
109376 Automorphic
890625 Automorphic
2890625 Automorphic
7109376 Automorphic
12890625 Automorphic
87109376 Automorphic
212890625 Automorphic
このくらいまでだった。
実際にたしかめると、212890625 * 212890625 = 45322418212890625 。
上の計算は、Frink の文字列処理関数を判定に使った。if と String 関数だけで書くと次のようなる。
n = 0
do {
if substringLen[toString[n*n], length[toString[n*n]] - length[toString[n]], length[toString[n]]] == toString[n]
{println["$n Automorphic"]}
} while n <= 1000000000
212890625 の次の自己同型数は、風呂からでてアイスコーヒーを飲みおわってもまだ出てこなかった。苦笑
この例は 10進数の場合である。
10進数のときの下位のけたの特徴はすぐわかる。この特徴を証明できれば、大きなけたまでの計算が少し時間短縮される。しかし無限にあることもわかる。
OEIS A003226 など参照。
Automorphic number については、Rec Math の半世紀くらい前の記事も参考になる。マーチン・ガードナーとかをよく読んでいた頃に購読していたが、全部処分してしまって部屋にはなくなってた。残念。
0 件のコメント:
コメントを投稿