2017-01-30 53 views
-1

我編寫了一個程序來查找數字列表中的素數,只是練習格式化和全部。這裏是我的代碼:爲什麼'while'導致程序在Python中運行時間更長

from math import * 
#Defining range to be checked 
a = range(1,10) 
#Opening empty list 
b = [] 
#Wilsons method for primes 
for n in a: 
    if ((factorial(n-1))+1)%n == 0: 
     b.append(n) 

此代碼運行沒有問題,並且相當快的,在這個階段至少使用。但是,當我包含一段時間的陳述(見下文)時,它會明顯變慢。

from math import * 
#Defining range to be checked 
a = range(1,10) 
#Opening empty list 
b = [] 
#Wilson't method for primes 
for n in a: 
    while n>1: 
     if ((factorial(n-1))+1)%n == 0: 
      b.append(n) 

任何人都可以解釋爲什麼會是這樣嗎?

n.b:我知道有更有效的方法來尋找素數。我只是練習格式化和所有,儘管我不介意改進我的代碼。

編輯:錯誤添加小於符號而不是合適的大於符號。糾正。

+0

第二個代碼要快很多,如'N'開始於'1',因此永遠不會滿足'ñ<1'並且從不計算'factorial(...'。然後它應該爲'b [1]'引發一個'IndexError',因爲它從不向'b'添加任何東西。 – TigerhawkT3

+2

'而n <1:'是'False'因爲'a'範圍從1到10.代碼不能工作!你確定嗎?如果它是真的,它將是一個無限循環。 –

+1

我不認爲需要while循環在所有 –

回答

0

正如一些人你的代碼將導致一個無限循環作爲n值不會改變while -loop指出。

您可能不會首先尋找while循環。沒有第一次迭代(n = 1),使用for循環就足夠了。如果你堅持,包括N = 1,使用if語句是一個可能的解決方法:

a=range(1,10) 
b=[] 
for n in a: 
    if n>1: 
     if ((factorial(n-1))+1)%n == 0: 
      b.append(n) 
相關問題