📅  最后修改于: 2023-12-03 15:10:50.823000             🧑  作者: Mango
本题的解法可以利用数学知识,具体思路如下:
首先我们观察题目,可以看出题目要我们检查给定的数字 N
是否可以通过一些操作转换成 K^k
的形式,其中 k
是正整数。
那么我们首先可以对 K
进行分解质因数,即 K=p1^c1 * p2^c2 * ... * pk^ck
,其中 p1,p2,...,pk
是质数,且 c1,c2,...,ck
均为正整数。那么我们现在就要检查 N
能否通过以下步骤转换成 K^k
的形式:
N
按照 K
的质因数分解式质因数分解,即 N=q1^d1 * q2^d2 * ... * qr^dr
;q_i
,若它出现的次数 d_i
不能被 c_i
整除,则无法转换成 K^k
的形式;q_i
,将其对应的次数 d_i
除以 c_i
,并将结果累加到 k
中;k
是否为正整数即可。根据上述思路,我们可以实现如下代码:
def check_power(N: int, K: int) -> bool:
# 分解质因数
factors_K = []
for i in range(2, int(K ** 0.5) + 1):
if K % i == 0:
cnt = 0
while K % i == 0:
K //= i
cnt += 1
factors_K.append((i, cnt))
if K > 1:
factors_K.append((K, 1))
# 检查是否能转换成 K^k 的形式
k = 0
for p, c in factors_K:
d = 0
while N % p == 0:
N //= p
d += 1
if d % c != 0:
return False
k += d // c
return k > 0 and N == 1
下面是一些测试样例:
assert check_power(1, 1) == True
assert check_power(2, 4) == False
assert check_power(16, 4) == True
assert check_power(65536, 4) == True
assert check_power(1024, 2) == True
assert check_power(1024, 3) == False
assert check_power(123456789, 2) == False
assert check_power(262144, 16) == True
所以,我们可以看到上述实现是正确的。