Python 以幂形式表示的整数

Python 以幂形式表示的整数,python,python-3.x,math,Python,Python 3.x,Math,如果对于一些A>0和一些x>1,我们有N=A^x,则称数字N可以幂形式表示 现在为了检查这一点,我们可以把log两边都取,方程变成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=lo

如果对于一些
A>0
和一些
x>1
,我们有
N=A^x
,则称数字
N
可以幂形式表示

现在为了检查这一点,我们可以把log两边都取,方程变成
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)


是否有其他替代/更好的方法解决此问题?

更好的方法是以下算法:

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)

x这是一个数学问题还是编程问题?我打算用它来编程,但可以当作一个数学问题来处理。时间复杂性不是你的主要问题,浮点精度才是。尝试n=76**89-1和n=76**89。浮点精度即使是小数值
log也会失败(1好点@BlownhitherMa偶数3**5失败。当i为2时,根(n,i)是平方根,当i为3时是立方根,依此类推。它是对数的,因为它在i达到n的底两个对数时或之前停止。(如果i是n的底两个对数,则是根。)(n,i)是2。)“LaSaJaPad谢谢,这就是我所要寻找的:”魔王28欢迎你。如果我的答案解决了你的问题,那么你可以考虑接受它作为正确的解决方案。