✨ feat(solutions):添加欧拉项目第9题和第10题的解决方案
📝 docs(solutions/0009):添加数学推导说明文档 ✨ feat(solutions/0010):实现素数求和算法并添加性能计时器
This commit is contained in:
7
solutions/0009/readme.md
Normal file
7
solutions/0009/readme.md
Normal 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) 。
|
||||||
34
solutions/0010.SumPrimes/eular_10.py
Normal file
34
solutions/0010.SumPrimes/eular_10.py
Normal 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))
|
||||||
Reference in New Issue
Block a user