目标
给你一个整数 n。请你计算以下两个值的 最大公约数(GCD):
sumOdd:最小的 n 个正奇数的总和。
sumEven:最小的 n 个正偶数的总和。
返回 sumOdd 和 sumEven 的 GCD。
示例 1:
输入: n = 4
输出: 4
解释:
前 4 个奇数的总和 sumOdd = 1 + 3 + 5 + 7 = 16
前 4 个偶数的总和 sumEven = 2 + 4 + 6 + 8 = 20
因此,GCD(sumOdd, sumEven) = GCD(16, 20) = 4。
示例 2:
输入: n = 5
输出: 5
解释:
前 5 个奇数的总和 sumOdd = 1 + 3 + 5 + 7 + 9 = 25
前 5 个偶数的总和 sumEven = 2 + 4 + 6 + 8 + 10 = 30
因此,GCD(sumOdd, sumEven) = GCD(25, 30) = 5。
提示:
1 <= n <= 1000
思路
计算最小的 n 个正奇数的和与最小的 n 个正偶数和的最大公约数。
(1 + 3 + 5 + …… + 2n - 1) = 2n * n / 2 = n^2(2 + 4 + 6 + …… + 2n) = (2n + 2) * n / 2 = n * (n + 1)
最大公约数为 n。
代码
/**
* @date 2026-07-15 8:51
*/
public class GcdOfOddEvenSums3658 {
public int gcdOfOddEvenSums(int n) {
int oddSum = 0;
int evenSum = 0;
for (int k = 0, i = 1, j = 2; k < n; i += 2, j += 2, k++) {
oddSum += i;
evenSum += j;
}
return gcd(oddSum, evenSum);
}
public int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
}
性能
