源本科技 | 码上会

完全平方数差值

2026/01/26
13
0

题目

一个整数,它加上 100 后是一个完全平方数,加上 168 又是一个完全平方数,请问该数是多少?

说明

设该整数为xx,根据题意,存在两个整数aabb,使得:

{x+100=a2x+168=b2 \begin{cases} x + 100 = a^2 \\ x + 168 = b^2 \end{cases}

两式相减得:b2a2=(x+168)(x+100)=68 b^2 - a^2 = (x + 168) - (x + 100) = 68

利用平方差公式:b2a2=(ba)(b+a)=68b^2 - a^2 = (b - a)(b + a) = 68

于是问题转化为:找出两个正整数m=bam = b - an=b+an = b + a,使得mn=68m \cdot n = 68,且m<nm < nmmnn 同奇偶(因为b=m+n2b = \frac{m+n}{2}a=nm2a = \frac{n-m}{2} 必须为整数)

对 68 进行因数分解:68=1×68=2×34=4×1768 = 1 \times 68 = 2 \times 34 = 4 \times 17

检查各因子对的奇偶性:

  • (1,68)(1, 68):一奇一偶 →a,ba, b 非整数 ❌

  • (2,34)(2, 34):均为偶数 → ✅

  • (4,17)(4, 17):一偶一奇 → ❌

(2,34)(2, 34) 满足条件:

b=2+342=18,a=3422=16 b = \frac{2 + 34}{2} = 18,\quad a = \frac{34 - 2}{2} = 16

代入得:x=a2100=162100=256100=156 x = a^2 - 100 = 16^2 - 100 = 256 - 100 = 156

验证:

  • 156+100=256=162156 + 100 = 256 = 16^2

  • 156+168=324=182156 + 168 = 324 = 18^2

因此,唯一解为x=156x = 156

运行示例

156加上100后是一个完全平方数,加上168又是一个完全平方数

👈点击左箭头查看答案(一定要在自己思考并实现后再看参考答案哦!)

规律分析

本题本质是求解两个完全平方数之差为定值(68) 的问题。一般地,若:b2a2=D b^2 - a^2 = D 则需将DD 分解为两个同奇偶因子的乘积。由于 68 的因子对有限,且仅一组满足同奇偶,故解唯一。

关键步骤:

  1. 建立方程并作差消元;

  2. 利用平方差公式转化为因数分解;

  3. 筛选满足整数解条件的因子对;

  4. 回代求原数。

程序实现

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 是判断完全平方数的常用技巧,但注意浮点精度问题(对大数可能失效)。更稳健的方法是取整后平方回验。