所以我决定在本周末学习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的错误,因为我显然错过了一些容易描述的东西。
下面进一步解答。
答案 0 :(得分:1)
如果a
不是素数,它至少有两个适当的除数,其中一个必须小于平方根(或者两者都是平方根)。如果b
到达sqrt(a)+1
,那么a
必须为素数。因此,如果b
到达a - 1
,您可以非常确定它是素数。您也可以将其替换为if a - 3 == b
或a / 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
您确定要正确复制并粘贴吗?我发现一个空格的缩进读数很糟糕,也许你错误复制或格式错误了?