题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h> // 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? // 分析:设这个数为i, x+100 = n², x+268 = m², m²-n² = 168 // (m+n)(m-n)=168, 设m+n=s,m-n=d ,s和d的取值范围为1-168之间 int main(void) { int m, n, s, d, x; for (int s = 1; s < 168; s++) { if (168 % s == 0) { d = 168 / s; if (s > d && (s + d) % 2 == 0 && (s - d) % 2 == 0) { m = (s + d) / 2; n = (s - d) / 2; printf("%d\n", n * n - 100); } } } return 0; }
本题的难度主要在于分析,具体如下:
设这个整数为x,得:式1:x + 100 = n²,式2:x + 268 = m²。
式2 – 式1 = m² – n² = 168.
再得(m + n)(m – n) =168.
设m+n = s, m – n = d;
所以:m+n+m-n = s + d, 2m = s + d, m = (s + d) / 2
同理:m + n – m + n = s – d, 2n = s – d, n = (s – d) / 2
因此,m和n都是偶数。
s 和 d的取值范围在1至168之间,排队重复的情况,s或d的取值仅为1 – 168/2 – 1 之间。
且,因为168是偶数,所以s和d至少要有一个数是偶数。
最终得到s和d都必须是偶数。
以上推导才是本题的难点。
检测一个数是否是偶数,n % 2 == 0;