-1

我写了一个程序来找出数字列表中的素数,所以练习格式化等等。这是我的代码:

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)

至少在这个使用阶段,此代码运行没有问题并且相当快。但是,当我包含一个 while 语句(见下文)时,它的速度要慢得多。

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)

谁能解释为什么会这样?

注意:我知道有更有效的方法可以找到素数。我只是在练习格式化等等,虽然我不介意改进我的代码。

编辑:错误地添加小于符号而不是适当的大于符号。已更正。

4

1 回答 1

0

正如一些人指出的那样,您的代码将导致无限循环,因为您的-loopn的值不会改变。while

您可能一开始就不是在寻找while循环。for在没有第一次迭代(n = 1)的情况下使用循环就足够了。如果您坚持包含 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)
于 2017-01-30T08:30:48.733 回答