溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python求質數的3種方法

發布時間:2020-10-22 23:05:36 來源:腳本之家 閱讀:921 作者:z大醬 欄目:開發技術

本文為大家分享了多種方法求質數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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女