Öncül
Bir gece, sadece sayıları düşünüyordum. 7, 10, 12, 13 ve daha fazlası gibi rakamlarla ilgili benzersiz bir şey öğrendim. Onlar kareler kareler! Yani, kare olduğunda, karelerin kendisinden ibarettir. OEIS, onlara iki veya daha fazla karenin ondalık birleşimi olan Kareler adını verir.
Bu tür sayıların örnekleri arasında 7 (49, 2 2 ve 3 2 ) 13 (169, 4 2 ve 3 2 ) ve 20 (400, 2 2 ve 0 2 ) içerir. Diğer örnekler 37'dir, 1369, 1, 36 ve 9 olarak bölünebildiği bir terimdir. 1444 (38 2 ), 1, 4, 4, 4 olarak bölünebileceği bir terimdir. .SE, ve benden sonra seçildi !
Meydan okuma
TanMath numaralarını basan bir program tasarlayın. N sayısı göz önüne alındığında (1'den başlayarak), nT TanMath numarasını, T (n) yazdırın.
Kod örneği olarak:
>> 1
>> 7
veya
>> 4
>> 13
Referans Python uygulaması (teşekkürler @ MartinBüttner ve @ 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
İşte ilk 100 sayının listesi:
7 10 12 13 19 20 21 30 35 37 38 40 41 44 50 57 60 65 70 80 90 95 97 100 102 105 108 110 112 119 120 121 125 129 130 138 140 150 160 170 180 190 191 200 201 204 205 209 210 212 220 223 230 240 250 253 260 270 280 285 290 300 305 306 310 315 320 325 330 340 342 343 345 348 350 360 369 370 375 379 380 390 397 400 402 405 408 410 413 420 430 440 441 450 460 475 475 480 487.
Bu bir kod golf, yani en kısa kod kazanır!
İyi şanslar!