本文為大家分享了多種方法求質數python實現代碼,供大家參考,具體內容如下
題目要求是求所有小于n的質數的個數。
求質數方法1:
窮舉法:
根據定義循環判斷該數除以比他小的每個自然數(大于1),如果有能被他整除的就不是質數:
def countPrimes1(self, n): """ :type n: int :rtype: int """ if n<=2: return 0 else: res=[] for i in range(2,n): flag=0 # 質數標志,=0表示質數 for j in range(2,i): if i%j ==0: flag=1 if flag==0: res.append(i) return len(res)
求質數方法2:
利用定理:如果一個數是合數,那么它的最小質因數肯定小于等于它的平方根。所以判斷一個數是否是質數,只需判斷它是否能被小于它開根后的所有數整除。這樣做的運算會少很多。
def countPrimes2(self, n): if n<=2: return 0 else: res=[] for i in range(2, n): flag=0 for j in range(2, int(math.sqrt(i))+1): if i % j == 0: flag = 1 if flag == 0: res.append(i) return len(res)
求質數方法3:
利用定理:如果一個數是合數,那么它的最小質因數肯定小于等于它的平方根。我們可以發現只要嘗試小于等于平方根的所有數即可。列舉從 3 到根號x的所有數,還是有些浪費。比如要判斷101是否質數,101的根號取整后是10,需要嘗試的數是1到10。但是可以發現,對9的嘗試是多余的。不能被3整除,必然不能被9整除……順著這個思路走下去,其實,只要嘗試小于根號x的質數即可。而這些質數,恰好前面已經算出來了,已經存在res中了。
def countPrimes3(self, n): if n <= 2: return 0 else: res = [] for i in range(2, n): flag = 0 for j in res: if i % j == 0: flag = 1 if flag == 0: res.append(i) return len(res)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。
新聞熱點
疑難解答