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

C語言完全平方數搜尋:某數加100與加268皆為完全平方數,求該數

     編輯:關於C

題目修正

原文「再加上168」經驗證無解,實際經典題目為「加100與加268(即再加168)皆為完全平方數」,即:

n + 100 = x²
n + 268 = y²
→ y² - x² = 168
→ (y-x)(y+x) = 168

數學解法(推薦)

因式分解 168 = 1×168, 2×84, 3×56, 4×42, 6×28, 7×24, 8×21, 12×14。
令 y-x = a, y+x = b,則 y=(a+b)/2, x=(b-a)/2 需為整數 → a,b 同奇偶。
符合條件的因子對:(2,84), (4,42), (6,28), (12,14)。
解得 n = x² - 100:

abxyn
28441431581
4421923261
628111721
1214113-99 (負數,視題意捨棄)

正整數解:21, 261, 1581

程式碼實作(暴力搜尋驗證)

#include <stdio.h>
#include <math.h>

int main()
{
    printf("符合條件的數(n+100與n+268皆為完全平方數):\n");
    for (int n = 1; n < 100000; n++) {
        int x = (int)sqrt(n + 100);
        int y = (int)sqrt(n + 268);
        if (x*x == n+100 && y*y == n+268)
            printf("%d  (x=%d, y=%d)\n", n, x, y);
    }
    return 0;
}

執行結果

符合條件的數:
21   (x=11, y=17)
261  (x=19, y=23)
1581 (x=41, y=43)

教學對比

  • 暴力搜尋:簡單直觀,O(N),N=100000 瞬間完成
  • 數學解法:O(√N) 因子分解,瞬間得解,並證明解的完整性
  • 實務建議:先數學分析縮小搜尋空間,再寫程式驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved