亲密数的科普及其Python实现
在数论中,亲密数是一种特殊的数字对,它们之间存在着独特的关系。简而言之,两个正整数 (a) 和 (b) 是亲密数,如果它们的因子之和等于对方,即:
- ( \sigma(a) - a = b )
- ( \sigma(b) - b = a )
其中,( \sigma(n) ) 是小于或等于 ( n ) 的所有正因子的和。当我们关注 ( n ) 以内的亲密数时,我们可以通过编写一个简单的Python程序来找到这些亲密数。
亲密数的特性
在展开主题之前,让我们先看看亲密数的一些特性:
- 亲密数一定是成对的。
- 最小的亲密数对是 (220, 284)。
- 亲密数对通常并不常见。
代码实现
下面我们将通过Python代码来查找 n 以内的所有亲密数。首先,我们需要一个函数来计算一个数的正因子之和。
计算因子之和的函数
def sum_of_divisors(n):
total = 1 # 因为1是所有正整数的因子
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
total += i
if i != n // i: # 确保不重复计数平方根
total += n // i
return total
在这个函数中,我们从1开始计算因子的和,直到平方根的整数部分。这样可以提高效率。
查找亲密数的主函数
接下来,我们可以编写另一个函数,来查看给定范围内的所有亲密数。
def find_amicable_numbers(n):
amicable_pairs = []
for i in range(1, n):
mate = sum_of_divisors(i)
if (mate != i) and (sum_of_divisors(mate) == i): # 确保两者互为亲密数
amicable_pairs.append((i, mate))
return amicable_pairs
完整程序
组合以上两个函数,我们最终得到如下代码:
def sum_of_divisors(n):
total = 1
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
total += i
if i != n // i:
total += n // i
return total
def find_amicable_numbers(n):
amicable_pairs = []
for i in range(1, n):
mate = sum_of_divisors(i)
if (mate != i) and (sum_of_divisors(mate) == i):
amicable_pairs.append((i, mate))
return amicable_pairs
# 调用主函数并输出结果
n = 3000
amicable_numbers = find_amicable_numbers(n)
print("亲密数对:", amicable_numbers)
结果演示
例如,若我们在3000以内寻找亲密数对,输出结果为:
亲密数对: [(220, 284)]
这表明220和284是我们所寻找的亲密数对。
状态图示例
在实现该程序的过程中,我们可以借助状态图来可视化程序的执行过程。下面是一个简化的状态图:
stateDiagram
[*] --> Start
Start --> SumOfDivisors
SumOfDivisors --> FindAmicableNumbers
FindAmicableNumbers --> [*]
旅行图示例
此外,我们也可以使用旅行图描述程序运行的过程:
journey
title 程序执行流程
section 计算因子和
计算因子和 : 5: Me
返回正因子之和 : 2: Me
section 查找亲密数
迭代每个数 : 3: Me
检查是否形成亲密数对 : 4: Me
结尾
亲密数不仅是数学中的有趣概念,也为算法编程提供了良好的练习。通过以上的Python实现,我们了解了如何有效地在给定范围内查找亲密数对。此程序可以扩展,以适应更多的条件和功能,为我们提供了探索数字奥秘的机会。希望这篇文章能激发你对数学和编程的兴趣,继续探索更多相关的主题!