编写递归函数,验证整数的所有数字是否为质数并返回“True”

-2 投票
2 回答
2840 浏览
提问于 2025-04-17 17:46

我需要写一个Python的递归函数,这个函数接收一个整数作为参数,如果这个整数的所有数字都是质数,就返回True。比如:

    allPrime(976)
      False
    allPrime(357)
      True

这是我到目前为止做的事情

def allPrime(n):
    h=str(n)
    for i in range(len(h)):
        if h[i] == isPrime(h):
            return True
        else:
            return False

2 个回答

0

在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的某些功能没有按照预期工作。这种情况就像你买了一台新机器,但它的某些功能却不太好用,让你感到困惑。

在这种情况下,很多人会去网上寻找解决方案,比如在StackOverflow上发帖求助。这里有很多热心的程序员会分享他们的经验和解决方法,帮助你找到问题的根源。

有时候,问题的原因可能是因为版本不兼容,或者是使用方法不对。就像你在使用手机应用时,可能需要更新到最新版本才能正常使用某些功能一样。

总之,遇到问题时,不要着急,先查查资料,看看有没有人遇到过类似的情况,或者直接问问社区里的朋友们,他们可能会给你很好的建议。

def allPrime(n):
    if n==0:
        return(True)
    elif (n%10) in [2,3,5,7]:
        return(allPrime(n//10))
    else:
        return(False)
0

要做到这一点,你只需要提取最后一个数字,检查它是否是质数,然后继续处理其他部分。

写递归的过程其实很简单,主要包括一个基础情况和递归部分。你需要把问题分解成一个更小的问题,直到你遇到一个基础情况。

所以,你需要做的是找到你的基础情况,也就是不需要再进行递归的情况,然后想想怎么实现这一点:

#separate the number (123) into a last Digit (3) and the rest (12)
lastDigit = n % 10
rest = int(n / 10)

如果我们遇到一个不是质数的数字,我们可以直接返回假值(False),就不再进行递归了:

if not isPrime(lastDigit):
    return False

基础部分就是一个数字,因此非基础部分就是我们进行递归的部分:

if n > 10:
    return allPrime(rest)

所以我们有一个情况是因为遇到非质数而停止,另外还有非基础情况。基础情况也不会进行递归,而且因为我们已经处理过非质数的情况,我们只需要:

return True

总结一下:

def isPrime(n):
    if n < 2: return False
    if n == 2: return True
    if n & 1 == 0: return False
    for x in range(3, int(n ** 0.5)+1, 2):
        if n % x == 0:
            return False
    return True


def allPrime(n):

    lastDigit = n % 10
    rest = int(n / 10)
    if not isPrime(lastDigit):
        return False
    if n > 10:
        return allPrime(rest)

    return True



print(allPrime(9777))
print(allPrime(773))

撰写回答