目录
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
题目分析
(1) x + 100 = m^2,这里取m>=0
(2) x + 100 + 168 = n^2 即 x + 268 = n^2,这里取n>=0
将(2)减去(1)得到:(n^2 - m^2) = 168
(3) 即 (n-m)(n+m) = 168
设a = n - m, b = n + m,则n+m>0,由(3)知 (n-m)*正数 = 168,所以n-m也是正数
即,n>m.所以有b>a>0.
由于n和m都是整数,所以a和b同奇偶(因为n和m都是整数,那么n+m和n-m同奇偶)
又因为a*b = 168(偶数)。所以a和b都是偶数。
综上:
- a < b
- a * b = 168
- a和b都是偶数
- 由a和b可以解出n和m: n = (a+b)/2, m = (b-a)/2,且n和m都是正整数(由于a和b都是偶数,所以n和m都是整数)
- 然后由m或n得到x: x = m^2 - 100
- 最后验算 x + 100 + 168 = n^2
C语言实现
cpp
#include <stdio.h>
#include <math.h>
int main() {
int a, b, x, m, n;
printf("---------------------------------------\n");
// a < b;a * b = 168 所以 a <= sqrt(168)
for (a = 2; a <= sqrt(168);)
{
b = 168 / a;
if (a < b && (b % 2 == 0) && (a % 2 == 0))
{
n = (a + b) / 2;
m = (b - a) / 2;
x = m * m - 100; // 求出x
// 再到另一个式子中验算
if (x+100+168 == n * n)
{
printf("%d + 100 = %d ^ 2\n", x, m);
printf("%d + 100 + 168 = %d ^ 2\n", x, n);
printf("---------------------------------------\n");
}
}
// a是偶数 所以每次可以+2
a += 2;
}
}
输出结果
cpp
---------------------------------------
1581 + 100 = 41 ^ 2
1581 + 100 + 168 = 43 ^ 2
---------------------------------------
261 + 100 = 19 ^ 2
261 + 100 + 168 = 23 ^ 2
---------------------------------------
21 + 100 = 11 ^ 2
21 + 100 + 168 = 17 ^ 2
---------------------------------------
-99 + 100 = 1 ^ 2
-99 + 100 + 168 = 13 ^ 2
---------------------------------------