You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

primes_100k_200k.py 1.2 kB

2 months ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import math
  2. import time
  3. def sieve_primes(n):
  4. if n < 2:
  5. return []
  6. sieve = [True] * (n+1)
  7. sieve[0] = sieve[1] = False
  8. for i in range(2, int(math.sqrt(n)) + 1):
  9. if sieve[i]:
  10. sieve[i*i : n+1 : i] = [False] * len(sieve[i*i : n+1 : i])
  11. return [i for i, is_prime in enumerate(sieve) if is_prime]
  12. def is_prime(n, small_primes):
  13. if n < 2:
  14. return False
  15. max_divisor = int(math.sqrt(n)) + 1
  16. for p in small_primes:
  17. if p > max_divisor:
  18. break
  19. if n % p == 0:
  20. return False
  21. return True
  22. def main():
  23. start_time = time.time()
  24. lower = 100000
  25. upper = 200000
  26. small_primes = sieve_primes(int(math.sqrt(upper)) + 1)
  27. primes = []
  28. for num in range(lower, upper + 1):
  29. if is_prime(num, small_primes):
  30. primes.append(num)
  31. elapsed_time = time.time() - start_time
  32. print(f"在 {lower}-{upper} 范围内找到 {len(primes)} 个质数")
  33. print(f"计算耗时: {elapsed_time:.2f} 秒")
  34. with open("primes_100k_200k.txt", "w") as f:
  35. for p in primes:
  36. f.write(f"{p}\n")
  37. if __name__ == "__main__":
  38. main()

No Description