|
|
|
@@ -0,0 +1,47 @@ |
|
|
|
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() |