簡體   English   中英

素數生成器不起作用Python

[英]Prime number generator is not working Python

我想做的是:

  • 創建一個奇數“列表”
  • 然后測試它們是否為素數,將使用奇數的一半的倍數進行測試,因此為奇數
  • 將質數放入列表
  • 打印該列表

但是我的結果是從1到1003的數字列表,它們跳過了3、4和5

這里有語義錯誤嗎?

#Prime number generator 

def primenumber():
    primelist = [1, 2]
    num = 3
    even = num%2
    multi = 0
    result = 0
    while len(primelist) < 1000:
        if even != 0:
            oddnum = num
        i = 2
        halfodd = ((oddnum + 1)/2)
        while i < halfodd:
            i =+ 1
            multi = oddnum%i
            if multi == 0:
                result += 1
        if result != 0:
            primelist.append(oddnum)
            prime_num = oddnum
        num += 1
    print primelist

primenumber() 
if result != 0:

由於result是(假設是)您發現了多少個因素的計數,因此您需要

if result == 0:

當您前進到新的候選質數時,您也不會重置result ,您永遠不會重新計算even ,如果這樣做了,那么您將考慮兩次奇數。

這應該工作:

def primenumber():
  primelist = [1, 2]
  candidate = 3
  while len(primelist) < 1000:
    isCandidatePrime = True
    if (candidate % 2 == 0): # if candidate is even, not a prime
      isCandidatePrime = False
    else:
      for i in range(3, (candidate+1)/2, 2): # else check odds up to 1/2 candidate
        if (candidate % i == 0): # if i divides it, not a prime
          isCandidatePrime = False
          break
    if (isCandidatePrime):
      primelist.append(candidate)
    candidate += 1
  print primelist

我認為有一些改進(僅檢查小於或等於候選者平方根的數字,僅檢查質數,而不是檢查所有不小於候選者平方根的數字),但我暫時不做討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM