給定整數 n (|n| ≤ 2^31-1),找到最大整數 k ≥ 1 使得存在整數 b 滿足 b^k = n。負數 n 僅當 k 為奇數時可能有解。
對於 n > 0:枚舉底數 b = 2 .. √|n|,計算 k = round(log|n| / log b),驗證 b^k == n。
對於 n < 0:同理,但只檢查奇數 k,且底數取負。
特殊情況:n = ±1 答案為任意大,但題目通常限定 k 最大輸出某值(UVa 10622 輸出 1)。
int maxPower(int n) {
if (n == 1 || n == -1) return 1; // 題目約定
int absN = abs(n);
int best = 1;
for (int b = 2; b <= sqrt(absN) + 1; ++b) {
double logN = log(absN);
double logB = log(b);
int k = int(logN / logB + 0.5); // 四捨五入
if (k < 2) continue;
long long p = 1;
for (int i=0;i
long long 計算冪避免溢出(b^k 可能超 int)。+0.5 四捨五入,再精確驗證。√|n| 足夠,因 b ≥ 2, k ≥ 2 ⇒ b ≤ √n。枚舉 O(√n) 底數,每底數 O(log n) 驗證,總 O(√n log n)。n ≤ 2e9 時 √n ≈ 4.5e4,極快。