""" By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10001st prime number? """ import time from math import log def timer(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} took {end - start:.6f} seconds") return result return wrapper @timer def sieve_nth_prime(n: int) -> int | None: if n == 1: return 2 # 估算上限:第n个质数约在 n*log(n) 附近 limit = int(n * (log(n) + log(log(n)))) + 10 if n > 6 else 20 sieve = [True] * limit sieve[0:2] = [False, False] # 0和1不是质数 count = 0 for p in range(2, limit): if sieve[p]: count += 1 if count == n: return p # 标记倍数 sieve[p * p : limit : p] = [False] * ((limit - 1 - p * p) // p + 1) return None if __name__ == "__main__": print(sieve_nth_prime(10001))