如果存在某个 a > 0
和某个 x > 1
,使得 N = a^x
,则称数字 N
可以表示为幂形式。
现在我们可以取对数,方程变成 log(n)/log(a)=x
,所以通过从 (2,sqrt(n))
迭代,如果存在任何一个数字可以给出整数 x
,那么该数字的 x
次方就可以表示为 N
。
下面是检查相同问题的代码:
from math import log,sqrt,floor
n=int(input())
t=floor(sqrt(n))+1
flag=False
for i in range(2,t):
x=log(n)/log(i)
if x==int(x):
print("YESSSSSSSSSSSSS!")
flag=True
break
if not flag:
print("Nooooooooooooooooooo!")
时间复杂度:O(n)
这个问题还有其他替代/更好的解决方案吗?
log(1<<29) / log(2) != 29
。您可能需要使用x - int(x) < ESP
比较来替代==
。 - Blownhither Ma