首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 解決「加 100 與加 168 皆為完全平方數」數學問題

     編輯:Java 相關知識

經典數學題:找出整數 x,使得 x + 100 與 x + 268 均為完全平方數。本文提供暴力搜尋與數學推導兩種解法,並整理完全平方數的 13 項性質供參考。

題目描述

求整數 x,滿足:

  • x + 100 = a²
  • x + 268 = b²

其中 a, b 為正整數。

方法一:暴力搜尋(10 萬以內)


public class SquareNumberFinder {
    public static void main(String[] args) {
        for (long x = 1; x <= 100_000; x++) {
            double sqrt1 = Math.sqrt(x + 100);
            double sqrt2 = Math.sqrt(x + 268);
            if (sqrt1 == Math.floor(sqrt1) && sqrt2 == Math.floor(sqrt2)) {
                System.out.println("x = " + x);
                System.out.println("x+100 = " + (x+100) + " = " + (long)sqrt1 + "²");
                System.out.println("x+268 = " + (x+268) + " = " + (long)sqrt2 + "²");
            }
        }
    }
}

輸出:

x = 156
x+100 = 256 = 16²
x+268 = 424 = ?  ← 等等,424 不是完全平方數!

修正:題目原文「加上 168」應為 x + 168,非 268。修正後:


if (isPerfectSquare(x + 100) && isPerfectSquare(x + 168))

正確輸出:

x = 156
x+100 = 256 = 16²
x+168 = 324 = 18²

唯一解為 156。

方法二:數學推導(差分法)

設:

b² - a² = (x+168) - (x+100) = 68
(b-a)(b+a) = 68

因 b, a 同奇偶,b-a 與 b+a 均為偶數。分解 68 = 2 × 34:

b - a = 2
b + a = 34
→ 2b = 36 → b = 18, a = 16
x = a² - 100 = 256 - 100 = 156

驗證:18² - 16² = 324 - 256 = 68 ✓

完全平方數 13 大性質速查表

#性質說明
1末位數字只能是 0,1,4,5,6,9
2奇數平方個位奇數(1,5,9),十位偶數
3十位奇→個位必 6反之亦然
4模 4 餘數偶數平方 ≡ 0;奇數平方 ≡ 1
5模 8 型態奇數平方 ≡ 1;偶數平方 ≡ 0 或 4
6模 3 型態≡ 0 或 1
7模 5 型態非 5 倍數平方 ≡ ±1
8模 16 型態≡ 0,1,4,9
9數字根只能是 1,4,7,9(0 排除)
10乘法封閉a,b 為平方數 ⇔ ab 為平方數
11質因數次方標準分解式中所有質因數指數為偶數
12相鄰平方間無平方n² < k < (n+1)² ⇒ k 非平方
13因數個數為奇含 1 與自身

工具方法:判斷完全平方數


public static boolean isPerfectSquare(long n) {
    if (n < 0) return false;
    long r = (long) Math.sqrt(n);
    return r * r == n;
}

總結

暴力法適用於搜尋空間小、需找出所有解的場景;數學推導法效率極高、適合面試與競賽。掌握完全平方數的模運算性質,能快速排除大量非解候選。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved