Dem*_*g28 3 python math python-3.x
N如果对于a > 0某些人而言x > 1,我们有一个数字可以用幂形式表达N = a^x.
现在要检查这个,我们可以记录两边的方程式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!")
Run Code Online (Sandbox Code Playgroud)
时间复杂度:O(n)
有没有其他替代/更好的方法来解决这个问题?
更好的方法是以下算法:
x <- 0
i <- 2
found <- false
do
x <- root(N, i)
if (x is integer) then
found <- true
end if
i <- i + 1
while (x >= 2) and (not found)
Run Code Online (Sandbox Code Playgroud)
该算法将比线性快得多.我认为它是对数的,但没有时间检查它.