本题很直观,先按顺序生成和遍历n位回文数,对每个回文数,依次检查其与立方数之差是否是平方数即可,最终结果是。
注:因用到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))
|