我一直在尝试使用Python 3.7.4模仿的Function is Swift。这是Swift的isPrime函数:
func isPrime(_ number: Int) -> Bool {
return number > 1 && !(2..<number(.contains {number % $0 == 0}
我想要类似上面的“ 1-liner”返回,但是在Python 3.7.4中
我已经尝试了一切,但没有成功。有人可以帮忙吗?
答案 0 :(得分:1)
您可以尝试以下方法:
import math
def isPrime(n):
return n in [2,3] or (n >= 5 and all(n % i for i in ([2, 3] + list(range(3, int(math.sqrt(n)) + 1, 2)))))
以下是一些测试:
print (isPrime(0)) #False
print (isPrime(4)) #False
print (isPrime(8)) #False
print (isPrime(9)) #False
print (isPrime(33)) #False
print (isPrime(2)) #True
print (isPrime(3)) #True
print (isPrime(5)) #True
print (isPrime(11)) #True
print (isPrime(59)) #True
您还可以使用素数的the属性,它们全都可以写成6 * x + 1
或6 * x - 1
,其中x
是一个正整数,以便该功能更具性能:
def isPrime(n):
root = int(math.sqrt(n)) + 1
return n in [2,3] or (n >= 5 and all(n % i for i in ([2, 3] + list(range(5, root, 6)) + list(range(7, root, 6)))))
更短(但效率较低)可能是:
def isPrime(n):
return n>1 and not {i for i in range(2,n) if n%i==0}