在考虑Bertrand's postulate的情况下,找到介于n
和2n
之间的质数最快的方法是什么?这里的n<2^32
。
在考虑Bertrand's postulate的情况下,找到介于n
和2n
之间的质数最快的方法是什么?这里的n<2^32
。
2^32
的一维数组,其中索引n
的值是n
和2n
之间所需的质数。当然,这会极大地占用内存,但它可能是最快的。1 < n < 2^32
,你需要在该列表中将最后一个质数设为大于2^32
,以捕捉所有这样的n
。那只需要一个包含34个质数的列表,非常可行。顺便说一下,如果你想做到2^64
,你只需要66个质数。from bisect import bisect_right
_bertrand_primes = [
2, 3, 5, 7, 13, 23,
43, 83, 163, 317, 631, 1259,
2503, 5003, 9973, 19937, 39869, 79699,
159389, 318751, 637499, 1274989, 2549951, 5099893,
10199767, 20399531, 40799041, 81598067, 163196129, 326392249,
652784471, 1305568919, 2611137817, 5222275627]
def prime_between_n_and_2n(n):
"""Find a prime number p such that n < p < 2n. The returned value
will be the first 'Bertrand prime' <https://oeis.org/A006992>
greater than n. n is limited to 1 < n < 2**32 but need not be an
integer. Outside those limits, None is returned.
"""
if 1 < n < 2**32:
return _bertrand_primes[bisect_right(_bertrand_primes, n)]