判断a是否是b的幂

8 投票
16 回答
16029 浏览
提问于 2025-04-16 10:15

我现在在使用singpath.com来练习我的Python,但我遇到了一个问题:

一个数字a如果能被b整除,并且a/b也是b的幂,那么我们就说a是b的幂。 写一个叫做is_power的函数,它接受参数a和b,如果a是b的幂,就返回True。

def is_power(a,b):
    c = a/b
    if (((a%b) == 0) and ((c%b) == 0)):
        return True
    else:
        return False 

上面是我的解决方案,但系统提示我需要让我的解决方案更通用。 有人能告诉我我的解决方案哪里出问题了吗?

16 个回答

1

你只是在检查前两个条件:a 能整除 b,和 a/b 也能整除 b。其实 a 可能等于 b 的三次方、四次方(或者一般情况下是 b 的 n 次方),所以真正的解决办法可能需要用到递归或者循环。

2

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如在StackOverflow这个网站上,很多人会提问,寻求帮助。这里的内容通常是关于编程的各种问题和解决方案。

有些问题可能涉及到代码的具体写法,或者是某个功能如何实现。对于初学者来说,理解这些内容可能会有点困难,因为里面可能会用到一些专业术语或者复杂的概念。

不过,没关系!只要我们一步一步来,慢慢理解,就能掌握这些知识。记住,编程就像学习一种新的语言,刚开始可能会觉得难,但只要多练习,就会变得越来越容易。

def is_power(a,b):
'''this program checks if number1 is a power of number2'''

if (a<b):  # lesser number isn't a power of a greater number
    return False
elif (b==0) or (b==1) : # Exception cases
    return False
elif a%b == 0 and is_power(a/b, b) == True:  # Condition check for is_power (Recursion!)
    return True
else:
    return False
11

你原来的代码之所以不工作,原因在于:你只是检查了 (c%b) == 0),也就是 (a/b) 能被 b 整除,这个条件比 a/b 是 b 的幂 要弱得多。

当你想解决这样的问题时,应该先从简单的情况入手。在这个例子中,有两个简单的情况:is_power(x,x)is_power(1,x),这两种情况下答案都是 True,因为 x**1==xx**0==1

一旦你处理了这些简单情况,就只需要写出定义的其余部分。写出 (a 能被 b 整除) 且 (a/b 是 b 的幂) 的代码,然后把它们组合在一起。

最终的函数看起来会是这样的:

def is_power(a,b):
    if <trivial case 1> or <trivial case 2>:
        return True
    # its a recursive definition so you have to use `is_power` here
    return <a is divisible by b> and <a/b is a power of b>

剩下唯一的问题是如何判断 <a/b 是 b 的幂>。最简单的方法是使用 is_power 这个函数本身,这种方法叫做递归。

撰写回答