Python循环不应该工作,但无论如何

时间:2011-05-30 22:12:07

标签: python loops

所以我决定在本周末学习python,并开始使用我的默认hello世界,即主要求解器。这段代码不起作用......但无论出于何种原因(对于数字5和更高的数字。)

#!/usr/bin/python
a = 2
while a < 65535:
    c = 0
    a = a + 1
    b = 2
    while b != a:
        if a % b == 0:
            #print a, "is not prime. LCD is ", b
            break
        b = b + 1
     if a - 1 == b: c = 1
 if c == 1: print a, " is prime"

最后一个条件的旁边应该总是假的,然而不知何故,对于所有素数5及以上,-1 == b。

有人可以指出这个noob的错误,因为我显然错过了一些容易描述的东西。

下面进一步解答。

2 个答案:

答案 0 :(得分:1)

如果a不是素数,它至少有两个适当的除数,其中一个必须小于平方根(或者两者都是平方根)。如果b到达sqrt(a)+1,那么a必须为素数。因此,如果b到达a - 1,您可以非常确定它是素数。您也可以将其替换为if a - 3 == ba / 2(但这可能不适用于较小的素数)。

答案 1 :(得分:0)

这似乎对我有用;将65535更改为1024并删除" is prime"部分后(因此我可以将结果直接运行到factor(1)),输出如下所示:

$ ./prime.py | xargs -n1 factor > /tmp/list ; wc -l list
170 list
$ head list
5: 5
7: 7
11: 11
13: 13
17: 17
19: 19
23: 23
29: 29
31: 31
37: 37

您确定要正确复制并粘贴吗?我发现一个空格的缩进读数很糟糕,也许你错误复制或格式错误了?