0348 平立方回文数
* * * *
拉格朗日计划
* * * *
平立方回文数

许多数可以表示为一个平方数与一个立方数之和,有些数甚至有不止一种表示方式。

考虑恰四种不同的上述表示方式的回文数,例如, 5229225=22852+303=22232+663=18102+1253=11972+1563. 求最小的五个这样的回文数之和。

本题难度:



解答

本题很直观,先按顺序生成和遍历n位回文数,对每个回文数,依次检查其与立方数之差是否是平方数即可,最终结果是1004195061

注:因用到math.isqrt函数,以下代码为Python 3,此外,代码中还打印了进度信息。

import math

n=2
r=[]
while len(r) < 5:
    d=10**(n//2)
    par=[i*d+int(str(i)[::-1]) for i in range(d//10,d)] if n%2==0 else [i*d*10+j*d+int(str(i)[::-1]) for j in range(10) for i in range(d//10,d)]
    for p in par:
        t=0
        i=c=1
        while c <= p:
            m=p-c
            s=math.isqrt(m)
            if s*s==m:
                t+=1
            i+=1
            c=i*i*i
        if t==4:
            r.append(p)
            if len(r)==5:
                break
    print(n,"digits checked, current found:", r)
    n+=1
    
print(sum(r))