✨ feat(pyproject.toml):添加sympy依赖用于数学计算
📝 feat(0021.AmicableNumbers/readme.md):添加亲和数对文档的中文翻译 ✨ feat(0022):新增欧拉问题22解决方案,包含姓名文件和处理脚本 ✨ feat(0023):新增欧拉问题23解决方案,包含三种实现和文档说明 📝 docs(solutions/0067.MaxPathSum2):新增热带半环理论综述文档 新增关于热带半环(Tropical Semiring)的详细综述文档,涵盖其数学原理、与代数几何的联系(热带几何)、在量子力学与量子信息中的应用,以及其他跨学科应用领域。文档系统性地介绍了热带半环的基本理论结构,包括min-plus/max-plus代数、幂等性与分配律,以及其与全序集和格论的联系。同时深入探讨了热带几何的核心概念(如热带化、热带簇、Amoebas和Newton多边形)及其在代数几何中的应用(如热带Bézout定理、拓扑不变量计算和枚举几何)。文档还综述了热带半环在量子力学(如热带量子理论、非厄米系统特殊点分析)和量子信息(如贝尔不等式分析、热带张量网络)中的前沿应用,并展望了其在密码学、生物信息学等领域的潜力。该文档旨在为相关领域的研究者提供一个全面的理论参考。
This commit is contained in:
70
solutions/0023/euler_23.py
Normal file
70
solutions/0023/euler_23.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""
|
||||
A perfect number is a number for which the sum of its proper divisors is exactly equal to the number.
|
||||
For example, the sum of the proper divisors of 28 would be 1 + 2 + 4 + 7 + 14 = 28,
|
||||
which means that 28 is a perfect number.
|
||||
|
||||
A number n is called deficient if the sum of its proper divisors is less than n and
|
||||
it is called abundant if this sum exceeds n .
|
||||
|
||||
As 12 is the smallest abundant number, 1+2+3+4+6 = 16,
|
||||
the smallest number that can be written as the sum of two abundant numbers is 24.
|
||||
By mathematical analysis, it can be shown that all integers greater than 28123 can be written
|
||||
as the sum of two abundant numbers.
|
||||
However, this upper limit cannot be reduced any further by analysis even though
|
||||
it is known that the greatest number that cannot be expressed as the sum of two abundant numbers is less than
|
||||
this limit.
|
||||
|
||||
Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers.
|
||||
"""
|
||||
|
||||
import time
|
||||
|
||||
|
||||
def timer(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
start_time = time.time()
|
||||
result = func(*args, **kwargs)
|
||||
end_time = time.time()
|
||||
print(f"Execution time: {end_time - start_time} seconds")
|
||||
return result
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def is_abundant(n: int) -> bool:
|
||||
if n % 12 == 0:
|
||||
return True
|
||||
sum_divisors = [1]
|
||||
for i in range(2, n):
|
||||
if n % i == 0:
|
||||
if i not in sum_divisors:
|
||||
sum_divisors.append(i)
|
||||
if n // i not in sum_divisors:
|
||||
sum_divisors.append(n // i)
|
||||
if sum(sum_divisors) > n:
|
||||
return True
|
||||
return sum(sum_divisors) > n
|
||||
|
||||
|
||||
def is_sum_of_two_abundants(n: int) -> bool:
|
||||
if n < 24:
|
||||
return False
|
||||
if n == 24:
|
||||
return True
|
||||
for i in range(12, n // 2 + 1):
|
||||
if is_abundant(i) and is_abundant(n - i):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
@timer
|
||||
def main():
|
||||
limit = 28123
|
||||
non_abundant_sums = [
|
||||
i for i in range(1, limit + 1) if not is_sum_of_two_abundants(i)
|
||||
]
|
||||
print(sum(non_abundant_sums))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user