整数以幂形式表示

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)

有没有其他替代/更好的方法来解决这个问题?

Laj*_*pad 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)
Run Code Online (Sandbox Code Playgroud)

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

  • 它是对数的,因为它在*i*之前或之前停止,达到基数 - *N*的两个对数.(如果*i*是*N*的基数 - 2对数,那么根(*N*,*i*)是2.) (2认同)