2016-11-24 31 views
-1

我寫了下面的代碼來找到N個素數。但是,我無法將它存儲在列表中。Python程序將首N個素數存儲在列表中?

 def prime(n): 

     global count 
     s=0 
     flag=0 
     ls=[] 
     for i in range(2,n/2+1): 
        if(n%i==0): 
          flag=1 
          break 

     if(flag==0): 
       print n 
       ls.append(n) 
       count=count+1 
     print ls 

    # main pro 
    n=input("Enter the number of prime numbers to be displayed: ") 
    print"The prime numbers are:" 
    count=0 
    x=2 
    while(count<n): 
      prime(x) 
      x+=1 

我的期望輸出應該是:

Enter the number of prime numbers to be displayed: 5 
    [2, 3, 5, 7, 11] 

但是當我運行該程序,我得到的輸出:

Enter the number of prime numbers to be displayed: 5 
    The prime numbers are: 
    2 
    [2] 
    3 
    [3] 
    [] 
    5 
    [5] 
    [] 
    7 
    [7] 
    [] 
    [] 
    [] 
    11 
    [11] 

如何添加素數到一個列表,而不改變上面的代碼? 我應該在後面追加元素嗎?我是Python新手,所有幫助表示感謝!謝謝!

+0

聲明'ls'全球範圍內,你在每次迭代重建它。 –

+0

但是我正在輸出爲: [2] [2,3] [2,3] [2,3,5] [2,3,5] [2,3,5,7] [2,3,5,7] [2,3,5,7] [2,3,5,7] [2,3,5,7,11] 如何在結束? –

+0

非常感謝! –

回答

0

這將返回的count素數數組:

def get_primes(count): 
    primes = [] 

    n = 2 
    while len(primes) != count: 
     for i in range(2, n // 2 + 1): 
      if n % i == 0: 
       break 
     else: 
      primes.append(n) 
     n += 1 

    return primes 

你可以使用它像這樣:

n=input("Enter the number of prime numbers to be displayed: ") 
array_of_n_prime_numbers = get_primes(n) 
print("The prime numbers are:", array_of_n_prime_numbers) 
+0

我明白在上面的代碼中,我不得不在全局聲明列表。 \t 但我得到的輸出爲:[2] [2,3] [2,3] [2,3,5] [2,3,5] [2,3,5,7] [2,3 ,5,7] [2,3,5,7] [2,3,5,7] [2,3,5,7,11]如何在最後打印一次?謝謝! –

+0

@AanandhiVB'print(「素數是:」,array_of_n_prime_numbers)' –

+0

@AanandhiVB你不需要全局聲明列表 –

0

試試這個

def prime(x): 
    if x<1: 
     return [] 
    prime_numbers = [2,3] 
    if x<3: 
     return prime_number[:x] 
    for i in range(2,x): 
     next_pn = prime_numbers[-1]+2 
     while any(not(next_pn%pn) for pn in prime_numbers): 
      next_pn += 2 
     prime_numbers.append(next_pn) 
    return prime_numbers 

N = input("Enter the number of prime numbers to be displayed:") 
print (prime(int(N))) 

輸出

Enter the number of prime numbers to be displayed:5 
[2, 3, 5, 7, 11] 

不需要遍歷所有的數字,而只需遍歷它之前的素數就可以迭代。

+0

非常感謝你! –

+0

如果它服務你的目的接受答案和upvote –

0

這裏有一個簡單的方法:

def prime(n): 
    ls = [2,3] 
    if (n < 3): 
     return ls[:n] 
    for i in range(2,n): 
     generate = ls[-1]+2 
     while any(not(generate%num) for num in ls): 
      generate += 2 
     ls.append(generate) 
    return ls 



n = int(input("Enter the number of prime numbers to be displayed:")) 
print (prime(n)) 

輸出當輸入爲5:

[2, 3, 5, 7, 11] 
相關問題