python中的素数,prog不起作用

python中的素数,prog不起作用,python,python-2.7,Python,Python 2.7,运行此操作后,它不会打印任何内容: for n in range(2,100): for x in range(2,n): if n%x == 0: break else: if n==x: print n,'is a prime number' 简单的逻辑说明了这一点-任何剩余值为0的东西都将跳出循环,任何值模本身都将是0,因此else块将永远不会到达运行所包含if的位置。if n==x将永

运行此操作后,它不会打印任何内容:

for n in range(2,100):
     for x in range(2,n):
        if n%x == 0:
         break
        else:
          if n==x:
           print n,'is a prime number'

简单的逻辑说明了这一点-任何剩余值为0的东西都将跳出循环,任何值模本身都将是
0
,因此
else
块将永远不会到达运行所包含
if
的位置。

if n==x
将永远不会为真,因为内部循环只针对
x
的值从
2
n-1
运行

如果需要检查内部循环是否运行完成,请在
for
本身的
之后使用
else
。如果未执行
中断
,则将执行
其他

for n in range(2,100):
    for x in range(2,n):
        if n%x == 0:
             break
    else:
        print n,'is a prime number'
一种更具python风格的方法是将
all
与生成器表达式一起使用:

for n in range(2,100):
    if all(n%x != 0 for x in range(2,n)):
        print n,'is a prime number'

假设3%3,所以它的模等于0,所以当它发生变化时,其他部分将工作,其中n==x表示3==3,print n表示print 3。但是它甚至不打印一个单词。
break
将从
for
循环中中断-因此
else
部分将永远不会运行,因为它在循环中。您可以使用附加变量将n%x==0的结果放入,当问题显然不是时,不要将其标记为Python 3。仅供参考,只需要内部循环在
范围(2,int(math.sqrt(n))
上迭代,以确定
n
是否为素数。原因是:如果某个整数
a
大于
sqrt(n)
除以
n
,那么
n/a
等于某个整数
b
。整数
b
也必须除以
n
,因为
a*b=n
。因为
a
大于
sqrt(n)
b
必须小于
sqrt(n)
,并且它将在
x
到达
sqrt(n)
之前找到。