一个整数,它加上 100 后是一个完全平方数,加上 168 又是一个完全平方数,请问该数是多少?
设该整数为,根据题意,存在两个整数 和,使得:
两式相减得:
利用平方差公式:
于是问题转化为:找出两个正整数、,使得,且, 与 同奇偶(因为、 必须为整数)。
对 68 进行因数分解:
检查各因子对的奇偶性:
:一奇一偶 → 非整数 ❌
:均为偶数 → ✅
:一偶一奇 → ❌
仅 满足条件:
代入得:
验证:
✅
✅
因此,唯一解为。
156加上100后是一个完全平方数,加上168又是一个完全平方数本题本质是求解两个完全平方数之差为定值(68) 的问题。一般地,若: 则需将 分解为两个同奇偶因子的乘积。由于 68 的因子对有限,且仅一组满足同奇偶,故解唯一。
关键步骤:
建立方程并作差消元;
利用平方差公式转化为因数分解;
筛选满足整数解条件的因子对;
回代求原数。
public class Demo13 {
public static void main(String[] args) {
for (int x = -100; x < 100000; x++) { // 从 -100 开始更合理(避免 x+100<0)
double sqrt1 = Math.sqrt(x + 100);
double sqrt2 = Math.sqrt(x + 168);
if (sqrt1 == (int)sqrt1 && sqrt2 == (int)sqrt2) {
System.out.println(x + "加上100后是一个完全平方数,加上168又是一个完全平方数");
break; // 已知唯一解,可提前退出
}
}
}
}此类问题属于丢番图方程的简单形式。
在编程竞赛中,若范围小可用暴力;若范围大或需理论保证,应优先代数推导。
Math.sqrt(n) % 1 == 0 是判断完全平方数的常用技巧,但注意浮点精度问题(对大数可能失效)。更稳健的方法是取整后平方回验。