Files
2025-12-26 17:35:14 +08:00

44 lines
1.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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))