iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
ChatGPT & Codex

從 Prompt Engineering 到 Copilot / Codex 實務 30 天系列 第 10 篇

Day 10:【數學與邏輯題】以 AI 推導數論與模擬問題的底層邏輯與優化解法

  • 分享至 

  • xImage
  •  

在演算法刷題或技術面試中,有一類題目常常讓工程師陷入苦戰——數學與邏輯模擬題。

這類題目的特點是:題目敘述通常很短,但如果直接照著字面意思「用迴圈純模擬」,通常會瞬間遭遇 Time Limit Exceeded (TLE) 或是數字溢位(Integer Overflow)。想要拿到最優解,往往需要借力於數論定理(如輾轉相除法、費馬小定理、質數篩法)或數學對稱性。

今天我們就來示範:如何將 ChatGPT 當作數學助教,一步步推導數學邏輯,並產出兼顧極致效能與數值安全的 Java 演算法!


一、數學題推導的提示詞模板(Math Deductive Prompting)

面對數學與邏輯題,千萬不要一開始就叫 AI「直接寫代碼」,否則很容易得到普通的暴力模擬解。建議使用以下推導流程:

【數學題推導提示詞範本】
請扮演演算法與離散數學教授。我正在研究以下演算法問題:
[貼上題目內容]

請依序為我進行三步推導:

  1. 數學本質抽象化:將題目的文字描述,轉換為數學公式或數論問題。
  2. 暴力模擬的瓶頸:直接用迴圈或遞迴模擬的時間複雜度是多少?當 N 達到極值(如 10^9)時會遇到什麼問題?
  3. 數學降維與規律挖掘:是否存在對稱性、週期性、奇偶性或數論定理,能將計算時間降至 O(log n) 甚至 O(1)?
  4. Java 實作與防溢位處理:請給出最優解法,並特別注意 32-bit 整數乘法或加法的溢位防禦。

二、實戰案例:LeetCode 50 - Pow(x, n) 快速冪運算

我們以經典的指數計算為例:

實作 myPow(x, n),計算 x 的 n 次方(即 x^n)。
限制:n 是一個 32 位元有號整數,範圍介於 -2^31 至 2^31-1。

步驟 1:向 AI 請教瓶頸與數學性質

當我們將問題送入提示詞模板後,AI 會指出:

  • 暴力模擬瓶頸:若用 for 迴圈將 x 連乘 n 次,時間複雜度為 O(n)。當 n = 2,147,483,647 時,運算次數超過 20 億次,絕對超時。
  • 核心數學規律(二分快速冪):
    • 若 n 為偶數:x^n = (x^2)^(n/2)
    • 若 n 為奇數:x^n = x * (x^2)^((n-1)/2)
    • 每次都能將指數減半,運算步數直接從 O(n) 驟降至 O(log n)。
  • 致命陷阱(Edge Case):
    • 當 n = -2,147,483,648(Integer.MIN_VALUE)時,直接取絕對值 -n 會引發 32-bit 整數溢位(因為正數最大值只到 2,147,483,647),必須先提升為 long 型別處理!

三、從數學推導到 Java 實作

經過數學性質確認與邊界分析後,AI 產出的迭代版(Iterative)快速冪代碼非常簡潔乾淨:

[Java 快速冪最優解]
public class Solution {
public double myPow(double x, int n) {
// 關鍵防禦:將 n 轉為 long,防止 Integer.MIN_VALUE 取負數時溢位
long exp = n;

    // 若指數為負數,轉換為倒數計算
    if (exp < 0) {
        x = 1.0 / x;
        exp = -exp;
    }

    double result = 1.0;
    double currentProduct = x;

    // 二分快速冪:利用二進位位元運算
    while (exp > 0) {
        // 如果當前最低位元為 1(奇數次冪),乘入結果
        if ((exp & 1) == 1) {
            result *= currentProduct;
        }
        // 底數平方
        currentProduct *= currentProduct;
        // 指數右移一位(等同於除以 2)
        exp >>= 1;
    }

    return result;
}

}


四、AI 推導對工程思維的提升

透過這套推導流程,工程師能學到兩個關鍵維度的思考:

  1. 演算法降維的震撼:
    • 暴力乘法:計算 2^30 需要乘 10 億次。
    • 快速冪:只需進行 30 次平方與乘法運算,時間複雜度從 O(n) 直降為 O(log n),這就是數學對算力的放大效應。
  2. 數值型別防禦意識:
    • 許多人在面試中演算法寫對了,卻掛在 Integer.MIN_VALUE 溢位。AI 主動提示的 long exp = n 處理,展現了高階工程師具備的防禦性編程(Defensive Programming)素養。

今日小結與預告

今天我們透過快速冪的經典範例,展示了如何用 AI 當作離散數學與演算法教練,從「規律挖掘」出發解決暴力模擬超時的痛點,並強化了極端數值溢位的邊界防禦。


上一篇
Day 09:【字串處理與 Regex】複雜字串解析免頭痛:讓 AI 生成正規表達式並附帶測試
下一篇
Day 11:【實戰紀錄】攻克經典 Medium 題目:與 AI 協同解題、除錯與優化的完整思維過程
系列文
從 Prompt Engineering 到 Copilot / Codex 實務 30 天 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言