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

UVa 10622 Perfect Powers:對數檢測整數冪指數最大值

     編輯:關於C++

問題描述

給定整數 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,極快。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved