2011-09-27 86 views
0
  1. 此代碼執行素數達到給定的數字。它對於主要一代而言是正確的,但輸出是痛苦的重複。
  2. 的代碼是:如何在我的代碼中停止重複?

    numP = 1 
    x = 3 
    y = int(input('Enter number of primes to be found: ')) 
    while numP<=y: 
        for n in range(2, x): 
         for b in range(2, n): 
          if n % b == 0: 
           break 
         else: 
          # loop fell through without finding a factor 
          print (n) 
         x += 2  
        numP += 1 
    
  3. 的輸出是等(例如對於y = 4):

    2 
    2 
    3 
    2 
    3 
    5 
    2 
    3 
    5 
    7 
    
  4. 我想避免重複,將獲得的輸出,如:

    2 
    3 
    5 
    7 
    
  5. 如何修改代碼?
+6

嘗試實現這個代替:https://secure.wikimedia.org/wikipedia/en/wiki/Sieve_of_Eratosthenes –

+0

你剛纔打我給它@larsmans,偉大的評論 – keiththomps

回答

0

如果你存儲在一個集中的數據,你會避免重複

+0

他還在重新計算所有的素數達到每一次的數量,「放置印刷品的位置在每個素數上只發生一次」的邏輯很重要。事實上,這是一個雙循環問題的三個循環。 – agf

0

沒有理由以循環n從2..x。擺脫那個循環,並用'x'替換'n'的所有引用。即:

def find_primes(y): 
    x = 3 
    numP = 0 
    while True: 
     for b in range(2, x): 
      if x % b == 0: 
       break 
     else: 
      # loop fell through without finding a factor 
      print (x) 
      numP += 1 
      if numP >= y: 
       return 
     x += 2