2017-01-30 25 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) 
相关问题