找卡普雷卡数(不一定均等分割)

K数:若正整数n可以分割为二个数(不一定是在中间位分割),而这二个数相加之和的平方恰好等于n,则n为K数。
要求:找出100000以内的全部K数。程序输出如下:

img


我只会用这种方法,自己手动排列组合😭

img


出来的效果带空格,与要求的形式略有不同😭

img


求巨佬答疑解惑🙇🏻‍♀️

可以考虑用字符串切片来做:

for i in range(1,100000):
    if i**2==i: print(f"{i}=(0+{i})**2")
    for j in range(1,len(str(i))):
        a,b = int(str(i)[:j]),int(str(i)[j:])
        if (a+b)**2 == i:
            print(f"{i}=({a}+{b})**2")
            break