我必须编写一个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
答案 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))