Tiền đề
Một đêm nọ, tôi chỉ đang suy ngẫm về những con số. Tôi phát hiện ra điều gì đó độc đáo về các số như 7, 10, 12, 13 và hơn thế nữa. Chúng là hình vuông của hình vuông! Có nghĩa là, khi bình phương, bao gồm chính hình vuông. OEIS gọi chúng là Hình vuông là phần ghép thập phân của hai hoặc nhiều hình vuông.
Ví dụ về các số như vậy bao gồm 7 (49 có 2 2 và 3 2 ) 13 (169 có 4 2 và 3 2 ) và 20 (400 có 2 2 và 0 2 ). Các ví dụ khác bao gồm 37, vì 1369 là một thuật ngữ vì nó có thể được phân vùng thành 1, 36 và 9. 1444 (38 2 ) là một thuật ngữ vì nó có thể được phân vùng thành 1, 4, 4, 4. Tôi đã hỏi về điều này trên Toán học .SE, và nó được đặt theo tên của tôi!
Thử thách
Thiết kế một chương trình in số TanMath. Cho số n (bắt đầu từ 1), in số TanMath thứ n, T (n).
Như một ví dụ mã:
>> 1
>> 7
hoặc là
>> 4
>> 13
Tham khảo triển khai Python (cảm ơn @ MartinBüttner và @ 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
Dưới đây là danh sách 100 số đầu tiên:
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 119 120 121 125 129 130 138 140 150 160 170 180 190 190 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
Đây là một mã golf, vì vậy mã ngắn nhất sẽ thắng!
Chúc may mắn!