【发布时间】:2018-03-19 05:21:59
【问题描述】:
我编写了一段代码,它可以输出第 10001 个素数。它目前占用 4 行代码,想知道我是否可以进一步压缩它?在这里;
for i in range(3,104744,2):
for x in range(3,int(i/2),2):
if i % x == 0 and i != x: break
else: print(i)
我我知道过多地压缩代码通常不是一件好事,但我想知道这是否可能。
谢谢。
【问题讨论】:
-
该代码永远不会产生
2,这是一个素数。 -
我尝试将 DeMorgan 定律应用于您的
if声明(i % x == 0在功能上是not i % x,因此您有两个nots 可以分解出来,and更改为 @987654328 @...) 导致if not (i % x or i == x): break... 但字符数相同! -
您可以尝试将其全部放入列表理解中。
-
我猜是
for p in (i for i in range(...) if all(i % x for x in range(...))但没关系