所以我决定这个周末学习 python,我从我的默认 hello world,素数求解器开始。这段代码不应该工作...但无论出于什么原因它都可以工作(对于数字 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"
最后一个条件的下一个应该始终为 false,但对于所有 5 及以上的素数,a -1 == b 应该始终为 false。
有人可以指出这个菜鸟的错误吗,因为我显然错过了一些容易描述的东西。
下面进一步回答。
最佳答案
如果a
不是素数,它至少有两个真约数,并且其中一个必须小于平方根(或者两者都是平方根)。如果b
达到sqrt(a)+1
,则a
一定是素数。因此,如果b
达到a - 1
,您就可以非常确定它是素数。您还可以将其替换为 if a - 3 == b
或 a/2
(但这可能不适用于较小的素数)。
关于Python 循环不应该工作但仍然可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181157/