| 123456789101112131415161718192021222324252627282930313233343536 |
- import numba
- from typing import List
- @numba.jit(nopython=True)
- def sieve_of_eratosthenes(n: int) -> List[int]:
- assert n >= 2
- is_prime = [True] * (n + 1)
- is_prime[0] = is_prime[1] = False # 0 和 1 不是素数
-
- for start in range(2, int(n**0.5) + 1):
- if is_prime[start]:
- for multiple in range(start*start, n + 1, start):
- is_prime[multiple] = False
-
- primes = [num for num, prime in enumerate(is_prime) if prime]
- return primes
- all_primes = sieve_of_eratosthenes(2**31)
- print(len(all_primes), all_primes[:10], all_primes[-10:])
- index = 3
- caps = [all_primes[index]]
- while True:
- for i in range(index+1, len(all_primes)):
- last_cap = caps[-1]
- min_cap = last_cap * 2
- if all_primes[i] >= min_cap:
- caps.append(all_primes[i])
- index = i
- break
- else:
- break
- print('-'*20)
- print(caps)
|