当前位置: 面试刷题>> 超级幂次 (经典算法题500道)


### 题目描述补充 **超级幂次问题**: 给定一个正整数 `N`,要求找到最小的正整数 `k` 和一个正整数 `p`(`p` >= 2),使得 `k^p = N` 成立。如果这样的 `k` 和 `p` 存在,则返回它们的值;如果不存在(即 `N` 不是一个超级幂次),则返回 `-1` 或相应的错误标识。 ### 示例 - 输入:`N = 8` - 输出:`k = 2, p = 3` (因为 `2^3 = 8`) - 输入:`N = 15` - 输出:`-1` (因为不存在整数 `k` 和 `p`(`p` >= 2),使得 `k^p = 15`) ### PHP 示例代码 ```php function findSuperPower($N) { $maxK = (int)sqrt($N); // 最大可能的k值不会超过sqrt(N)(对于p>=2) for ($k = 2; $k <= $maxK; $k++) { $p = 1; $temp = $k; while ($temp <= $N) { if ($temp == $N) { return [$k, $p]; } $temp *= $k; $p++; } } return -1; // 如果没有找到 } // 示例使用 $N = 8; list($k, $p) = findSuperPower($N); if ($k != -1) { echo "k = $k, p = $p"; } else { echo "No super power found."; } ``` ### Python 示例代码 ```python def find_super_power(N): max_k = int(N**0.5) # 最大可能的k值 for k in range(2, max_k + 1): temp = k p = 1 while temp <= N: if temp == N: return k, p temp *= k p += 1 return -1 # 如果没有找到 # 示例使用 N = 8 k, p = find_super_power(N) if k != -1: print(f"k = {k}, p = {p}") else: print("No super power found.") ``` ### JavaScript 示例代码 ```javascript function findSuperPower(N) { let maxK = Math.floor(Math.sqrt(N)); // 最大可能的k值 for (let k = 2; k <= maxK; k++) { let temp = k; let p = 1; while (temp <= N) { if (temp === N) { return [k, p]; } temp *= k; p++; } } return -1; // 如果没有找到 } // 示例使用 const N = 8; const [k, p] = findSuperPower(N); if (k !== -1) { console.log(`k = ${k}, p = ${p}`); } else { console.log("No super power found."); } ``` **码小课网站中有更多相关内容分享给大家学习**,希望这些示例能帮助你理解并解决问题。
推荐面试题