置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2026年7月15日 星期三

LeetCode 解題筆記:3658. GCD of Odd and Even Sums

作者:王一哲
日期:2026年7月15日


LeetCode 題目連結:3658. GCD of Odd and Even Sums

解題想法


簡單題。這題考數學,直接回傳 $n$ 即可。前 $n$ 個正的奇數和為 $$ sumOdd = 1 + 3 + 5 + \dots + (2n - 1) = \frac{(2n - 1 + 1) \times n}{2} = n^2 $$ 前 $n$ 個正的偶數和為 $$ sumEven = 2 + 4 + 6 + \dots + 2n = \frac{(2n + 2) \times n}{2} = n(n+1) $$ 因為 $n$ 與 $n+1$ 的最大公因數為 $1$,因此 $sumOdd$ 與 $sumEven$ 的最大公因數為 $n$。

如果沒有想到以上的數學性質,真的用迴圈算出 $sumOdd$ 與 $sumEven$ 的值再取最大公因數也可能,因為題目的 $n$ 最大為 $1000$,很快就能算完。

Python 程式碼


Runtime: 0 ms, beats 100.00%. Memory: 19.18 MB, beats 85.77%.
class Solution:
    def gcdOfOddEvenSums(self, n: int) -> int:
        return n

Runtime: 11 ms, beats 38.21%. Memory: 19.24 MB, beats 53.03%.
class Solution:
    def gcdOfOddEvenSums(self, n: int) -> int:
        sumOdd = sum(range(1, 2*n, 2))
        sumEven = sum(range(2, 2*n + 1, 2))
        return gcd(sumOdd, sumEven)


C++ 程式碼


Runtime: 0 ms, beats 100.00%. Memory: 8.52 MB, beats 46.67%.
class Solution {
public:
    int gcdOfOddEvenSums(int n) {
        return n;
    }
};

Runtime: 0 ms, beats 100.00%. Memory: 8.48 MB, beats 85.02%.
class Solution {
public:
    int gcdOfOddEvenSums(int n) {
        int sumOdd = 0, sumEven = 0;
        for(int i = 1; i < 2*n; i += 2) sumOdd += i;
        for(int i = 2; i <= 2*n; i += 2) sumEven += i;
        return gcd(sumOdd, sumEven);
    }
};


C 語言程式碼


Runtime: 0 ms, beats 100.00%. Memory: 9.13 MB, beats 16.92%.
int gcdOfOddEvenSums(int n) {
    return n;
}

Runtime: 0 ms, beats 100.00%. Memory: 9.00 MB, beats 89.62%.
int gcd(int a, int b) {
    int r;
    while(b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

int gcdOfOddEvenSums(int n) {
    int sumOdd = 0, sumEven = 0;
    for(int i = 1; i < 2*n; i += 2) sumOdd += i;
    for(int i = 2; i <= 2*n; i += 2) sumEven += i;
    return gcd(sumOdd, sumEven);
}


沒有留言:

張貼留言