实例003:完全平方数
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:
假设该数为x,则:
x
+
100
=
n
2
(1)
x + 100 = n^2 \tag1
x+100=n2(1)
x
+
100
+
168
=
m
2
(2)
x + 100 + 168 = m^2 \tag2
x+100+168=m2(2)
计算等式: m 2 − n 2 = ( m + n ) ( m − n ) = 168 (3) m ^2 - n ^2 = (m+n)(m-n) = 168 \tag3 m2−n2=(m+n)(m−n)=168(3)
设: i = m + n , j = m − n (4) i = m + n ,\qquad j = m - n \tag4 i=m+n,j=m−n(4)
那么, i ∗ j = 168 i * j = 168 i∗j=168, i和j至少一个是偶数
由(4)得到:
m
=
i
+
j
2
(5)
m = \dfrac{i+j}{2}\tag5
m=2i+j(5)
n
=
i
−
j
2
(6)
n = \dfrac{i-j}{2}\tag6
n=2i−j(6)
由(5)和(6)可知,i和j要么都是偶数,要么都是奇数
由此可推导出,i与j均是大于等于2的偶数。
由于 i ∗ j = 168 , j > = 2 则 : 1 < i < 168 2 + 1 i * j = 168,\quad j>=2 \quad 则: 1 < i < \dfrac{168}{2} +1 i∗j=168,j>=2则:1<i<2168+1
那么就可以对所有数字循环计算。
** 程序:**
# -*- coding: UTF-8 -*-
for i in range(1, 85):
if 168 % i == 0:
j = 168 / i
if i>j and (i-j) % 2 == 0 and (i + j) % 2 ==0:
m = (i+j) / 2
n = (i - j) / 2
x = n * n - 100
print(x)