diff --git a/solutions/0009/readme.md b/solutions/0009/readme.md new file mode 100644 index 0000000..6edfb56 --- /dev/null +++ b/solutions/0009/readme.md @@ -0,0 +1,7 @@ +这个问题从数学上,需要换元替代计算。 + +a = k(m^2 - n^2) +b = 2kmn +c = k(m^2 + n^2) + +基于这个换元进新推导。或者就是直接基于原始命题进行计算,可以参见 [这个解答](https://math.stackexchange.com/a/3378895) 。 diff --git a/solutions/0010.SumPrimes/eular_10.py b/solutions/0010.SumPrimes/eular_10.py new file mode 100644 index 0000000..49a33d0 --- /dev/null +++ b/solutions/0010.SumPrimes/eular_10.py @@ -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))