|
- import math
- import time
-
- def sieve_primes(n):
- if n < 2:
- return []
- sieve = [True] * (n+1)
- sieve[0] = sieve[1] = False
- for i in range(2, int(math.sqrt(n)) + 1):
- if sieve[i]:
- sieve[i*i : n+1 : i] = [False] * len(sieve[i*i : n+1 : i])
- return [i for i, is_prime in enumerate(sieve) if is_prime]
-
- def is_prime(n, small_primes):
- if n < 2:
- return False
- max_divisor = int(math.sqrt(n)) + 1
- for p in small_primes:
- if p > max_divisor:
- break
- if n % p == 0:
- return False
- return True
-
- def main():
- start_time = time.time()
- lower = 100000
- upper = 200000
-
- small_primes = sieve_primes(int(math.sqrt(upper)) + 1)
- primes = []
-
- for num in range(lower, upper + 1):
- if is_prime(num, small_primes):
- primes.append(num)
-
- elapsed_time = time.time() - start_time
-
- print(f"在 {lower}-{upper} 范围内找到 {len(primes)} 个质数")
- print(f"计算耗时: {elapsed_time:.2f} 秒")
-
- with open("primes_100k_200k.txt", "w") as f:
- for p in primes:
- f.write(f"{p}\n")
-
- if __name__ == "__main__":
- main()
|