思路:
设整数为x
①. x+100=n*n
②. x+100+168 = m*m
③. m*m - n*n = 168 =>(m+n)(m-n)=168
令: m+n=i, m-n=j
④所以: i*j =168 (i,j 至少有一个是偶数)
⑤ m = (i+j)/2
⑥ n = (i-j)/2
⑦由⑤,⑥.可知: i,j均是偶数
⑧. n**2 = ((i-j)/2)**2
所以x的表达式:
x = n*n-100
x = ((i-j)/2)**2 -100
根据对称性: i*j=168<169=13**2
所以遍历i的范围是: i∈[2,13)
for i in range(2,13):
if 168 % i == 0:
j = 168 / i
if (i+j) %2 == 0 and (i-j)%2 ==0:
x = int((i-j)/2)**2 -100
print(x)
输出结果:
1581
261
21
-99