feat(solutions):添加欧拉项目第9题和第10题的解决方案

📝 docs(solutions/0009):添加数学推导说明文档
 feat(solutions/0010):实现素数求和算法并添加性能计时器
This commit is contained in:
2025-12-15 17:29:36 +08:00
parent 56918e65d7
commit ee9dc87ab4
2 changed files with 41 additions and 0 deletions

7
solutions/0009/readme.md Normal file
View File

@@ -0,0 +1,7 @@
这个问题从数学上,需要换元替代计算。
a = k(m^2 - n^2)
b = 2kmn
c = k(m^2 + n^2)
基于这个换元进新推导。或者就是直接基于原始命题进行计算,可以参见 [这个解答](https://math.stackexchange.com/a/3378895) 。

View File

@@ -0,0 +1,34 @@
"""
Sum of primes below 2 million
"""
import time
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
def sieve_primes(max: int) -> list[int]:
primes = [True] * (max + 1)
primes[0:2] = [False, False]
for i in range(2, max + 1):
if primes[i]:
primes[i * i : max : i] = [False] * ((max - 1 - i * i) // i + 1)
return [i for i in range(max) if primes[i]]
@timer
def sum_primes(max: int) -> int:
return sum(sieve_primes(max))
if __name__ == "__main__":
print(sum_primes(2_000_000))