0

我编写了一段代码,它可以吐出第 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)

我知道过多地压缩代码通常不是一件好事,但我想知道这是否可能

谢谢。

4

3 回答 3

0

列表理解

>>> r=range(2,100)
>>> [p for p in r if [p%d for d in r].count(0)<2]

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 ]

于 2017-10-07T16:35:27.697 回答
0

You can use a list comprehension and any to get a one-liner solution:

>>> [p for p in range(2, 100) if not any (p % d == 0 for d in range(2, int(p**0.5) + 1))]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

It uses the fact that a divisor cannot be larger than the square root of the number it divies.

It seems to work fine:

>>> len([p for p in range(2, 104744) if not any (p % d == 0 for d in range(2,int(p**0.5)+1))])
10001
于 2017-10-07T16:27:25.420 回答
0

试试这个:

for i in range(3,100,2):
    if all( i%x for x in range(3, i//2, 2) ):
        print(i)
于 2017-10-07T16:42:12.530 回答