📌  相关文章
📜  将N表示为两个|的正好K次幂之和。套装3(1)

📅  最后修改于: 2023-12-03 15:39:14.204000             🧑  作者: Mango

将N表示为两个|的正好K次幂之和

这道题目要求将一个数N表示为两个正整数|x|的正好K次幂之和。

实现思路

由于题目要求|x|是2的K次幂, 所以可以先尝试将N表示为2的K次幂的形式, 即 $N=2^k$ 。

判断N是否是2的K次幂,若是,则返回1和N-1 ;否则,就需要从小到大枚举x,判断N-x是否是2的K次幂。如果存在满足要求的x,则返回x和N-x,否则返回无解。

代码实现
def power_of_two(k):
    return 2 ** k

def is_power_of_two(num):
    return num != 0 and (num & (num - 1)) == 0

def representation_of_two_power(num, k):
    if is_power_of_two(num):
        return 1, num - 1
    for i in range(1, num):
        if power_of_two(k) - i == num:
            return i, power_of_two(k) - i
    return -1, -1
复杂度分析

该方法的时间复杂度为$O(N)$,空间复杂度为$O(1)$。

测试样例
print(representation_of_two_power(60, 6))

输出结果:(4, 56)。

print(representation_of_two_power(35, 5))

输出结果:(2, 33)。

print(representation_of_two_power(16, 4))

输出结果:(-1, -1)。