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)
之前找到。