整数以幂形式表示

时间:2017-12-31 11:22:46

标签: python python-3.x math

如果对于某些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!")

时间复杂度: O n

还有其他替代/更好的解决方法吗?

1 个答案:

答案 0 :(得分:5)

更好的方法是以下算法:

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)

此算法将比线性快得多。我认为它是对数的,但没有时间检查它。