"""题目:
一个整数,它加上100后是一个完全平方数,
再加上168又是一个完全平方数,
请问该数是多少?"""
# 程序分析:
# i + 100 = x * x i + 268 = y * y
# 程序源代码:
import math
for i in range(10000):
x = int(math.sqrt(i + 100))
y = int(math.sqrt(i + 268))
if (x * x == i + 100) and (y * y == i + 268):
print(i)
"""
上述程序的结果是不准确的,21,261,1581
所以要先确定这个数字的范围。
1. i + 100 = x * x i + 268 = y * y
2. y*y - x*x = (y-x)*(y+x) = 168
3. y+x = a y-x = b a*b = 168
4. y=(a+b)/2 x=(a-b)/2 所以a+b和a-b都是偶数,a和b同奇偶,
5. a*b=168 表明必有一偶,所以a和b都是偶数
6. a和b都是>=2的偶数
7. a*b=168 b>=2,则1<a<168/2+1=85
8. 找到所有的a,就能找到所有的i
"""
for a in range(1, 85):
if 168 % a == 0: # 首先a要能被168整除
b = 168 / a
if a > b and (a + b) % 2 == 0 and (a - b) % 2 == 0:
y = (a + b) / 2
x = (a - b) / 2
i = int(x * x - 100)
print(i)
# 这个结果多了一个 -99