实例003:完全平方数

实例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)
上一篇:AcWing 168. 生日蛋糕


下一篇:C# 二进制字节流查找函数IndexOf