写一个带有整数的递归函数,如果它的所有数字都是素数,则返回“True”

时间:2013-03-03 17:04:05

标签: python recursion

我必须编写一个Python递归函数,它以整数作为参数,如果所有数字都是素数,则返回True。    e.g。

    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 :(得分:0)

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

答案 1 :(得分: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))