python中的随机素数

Pol*_*ITS 5 python random primes list-comprehension generator

我目前有↓设置为我的randprime(p,q)功能.有没有办法通过像genexplistcomp之类的东西来缩小它?这是我的功能:

n = randint(p, q)
while not isPrime(n):
    n = randint(p, q)
Run Code Online (Sandbox Code Playgroud)

小智 4

最好只生成素数列表,然后从该行中进行选择。照原样,您的代码很可能会陷入无限循环,如果间隔中没有素数,或者randint总是选​​择非素数,那么while循环将永远不会结束。

所以这可能更短并且不那么麻烦:

import random
primes = [i for i in range(p,q) if isPrime(i)]
n = random.choice(primes)
Run Code Online (Sandbox Code Playgroud)

这样做的另一个优点是,如果区间内没有素数,则不会出现死锁。如前所述,根据范围的不同,这可能会很慢,因此如果您提前缓存素数,速度会更快:

# initialising primes
minPrime = 0
maxPrime = 1000
cached_primes = [i for i in range(minPrime,maxPrime) if isPrime(i)]

#elsewhere in the code
import random
n = random.choice([i for i in cached_primes if p<i<q])
Run Code Online (Sandbox Code Playgroud)

同样,进一步的优化是可能的,但很大程度上取决于您的实际代码......并且您知道他们对过早优化的看法。

  • 如果 p 和 q 的数量级为 10**10,这可能是一个非常糟糕的主意,如果您正在考虑加密,那么尝试这种做法是合理的。 (5认同)