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


题目描述补充

超级幂次问题: 给定一个正整数 N,要求找到最小的正整数 k 和一个正整数 pp >= 2),使得 k^p = N 成立。如果这样的 kp 存在,则返回它们的值;如果不存在(即 N 不是一个超级幂次),则返回 -1 或相应的错误标识。

示例

  • 输入:N = 8

  • 输出:k = 2, p = 3 (因为 2^3 = 8

  • 输入:N = 15

  • 输出:-1 (因为不存在整数 kpp >= 2),使得 k^p = 15

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 示例代码

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 示例代码

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.");
}

码小课网站中有更多相关内容分享给大家学习,希望这些示例能帮助你理解并解决问题。

推荐面试题