我有一個計算素數在python中使用「all」和「any」關鍵字會給出意想不到的輸出?
def isPrime(n):
if (n==2):
return True
elif n<=1 or n%2==0:
return False
else:
for i in xrange(3,n/2, 2):
if n%i:
return False
return True
mylist = [6,9]
mylist2= [3,5,7,11,12]
if not any(isPrime(x) for x in mylist):
print "No primes in list"
if not all(isPrime(x) for x in mylist2):
print "Not all are primes numbers"
當我運行這個程序
這下面的代碼,我得到
python calculate_primes.py
Not all are primes numbers
我不明白的No primes in list
輸出。但如果我刪除mylist
中的元素9
,並且只有6
,它工作正常。
python calculate_primes.py
No primes in list
Not all are primes numbers
要麼是我的代碼有問題,要麼我錯誤地使用了any
? 這裏有一些技巧請
你甚至嘗試打印isPrime(9)'? – roippi
檢查答案但除此之外,你也只需要從3循環到int(math.sqrt(n)),n/2是過度的。爲了進一步提高效率,請閱讀http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes –
我知道'sieve'算法,但我不知道'int(math.sqrt(n)'是否足夠。你解釋了爲什麼? –