python中判斷素數的函數


來看這一種判斷素數(質數)的函數:

form math import sart

def is_prime(n):
if n==1:
return False
for i in range(2, int(sqrt(n) + 1)):
	if n % i == 0:
	return False
return True

看起來,這是一種比較優秀的方法了,因為通過sqrt()函數減少了開方級的計算量。
再來看:

def is_prime(number):
    if number > 1:
        if number == 2:
            return True
        if number % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0: 
                return False
        return True
    return False

咋一看,這一次的代碼看起來更多。但是,計算量卻又在原來的基礎上又幾乎減少一半。高明之處就在這一句:if number % 2 == 0:,其實這一句就一部將2以及所有合數因子給排除掉了,所以在這一句range(3, int(math.sqrt(number) + 1), 2)中,直接從3起步,步長為2.在range()函數產生的序列是[3,5,7,9,...],比原來由range(2, int(sqrt(n) + 1))產生的[2,3,4,5,6,...]少了合數的部分。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM