前提
ある夜、私はただ数字を考えていました。私は、7、10、12、13などのような数字についてユニークな何かを見つけました。彼らは正方形の正方形です!意味は、二乗したとき、それ自体が正方形で構成されることです。OEISは、2つ以上の正方形を10進数で連結したものを正方形と呼びます。
このような数の例には、7(49は2 2と3 2)13(169は4 2と3 2)と20(400は2 2と0 2)が含まれます。1369は1、36、9に分割できるので、他の例には37が含まれます。1444(38 2)は1、4、4、4 に分割できるので、用語です。 .SE、そして私にちなんで命名されました!
チャレンジ
TanMath番号を印刷するプログラムを設計します。番号n(1から始まる)を指定して、n番目のTanMath番号T(n)を出力します。
コード例として:
>> 1
>> 7
または
>> 4
>> 13
Python実装の参照(@MartinBüttnerと@ Sp3000に感謝!):
from math import sqrt
n = input()
def r(digits, depth):
z = len(digits)
if z < 1:
return (depth > 1)
else:
for i in range(1, z+1):
t = int(digits[:i])
if sqrt(t).is_integer() and r(digits[i:], depth+1):
return True
return False
i=0
t=0
while t < n:
i += 1
if r(str(i**2), 0):
t += 1
print i
以下は、最初の100個の数字のリストです。
7 10 12 13 19 20 21 30 35 37 38 40 41 44 50 57 60 65 70 80 90 95 97 100 102105 107 108 110 112 119 120 121 125 129 130 138 140 150 160 170 180 190 191 200 201 204 205 209 210 212 220223230240250253260270280280285290300305306310315320320325330340342343345348350360369370370375379380390 397400402405408410413420430440441450460470475480487
これはコードゴルフなので、最短のコードが勝ちます!
がんばろう!