当前位置: 面试刷题>> 超级幂次 (经典算法题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.");
}
```
**码小课网站中有更多相关内容分享给大家学习**,希望这些示例能帮助你理解并解决问题。