Premessa
Una notte, stavo solo riflettendo sui numeri. Ho scoperto qualcosa di unico su numeri come 7, 10, 12, 13 e altri. Sono quadrati di quadrati! Significa che, quando sono quadrati, sono composti da quadrati stessi. L'OEIS li chiama Quadrati che sono una concatenazione decimale di due o più quadrati.
Esempi di tali numeri includono 7 (49 ha 2 2 e 3 2 ) 13 (169 ha 4 2 e 3 2 ) e 20 (400 ha 2 2 e 0 2 ). Altri esempi includono 37, poiché 1369 è un termine in quanto può essere partizionato come 1, 36 e 9. 1444 (38 2 ) è un termine in quanto può essere partizionato come 1, 4, 4, 4. Ho chiesto questo su Math .SE, e prende il nome da me!
Sfida
Progetta un programma che stampa i numeri TanMath. Dato il numero n (a partire da 1), stampa l'ennesimo numero TanMath, T (n).
Come esempio di codice:
>> 1
>> 7
o
>> 4
>> 13
Implementazione di Python di riferimento (grazie a @ MartinBüttner e @ 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
Ecco un elenco dei primi 100 numeri:
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 107 108 110 112 112 120 120 121 125 129 130 138 140 150 160 170 180 190 191 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 470 475 480 487
Questo è un codice golf, quindi vince il codice più corto!
In bocca al lupo!