什么是相親數(shù)?相親數(shù)指的是兩個數(shù),如果一個數(shù)的所有因子之和等于另一個數(shù),且這個數(shù)的所有因子之和又恰好等于第一個數(shù),那么這兩個數(shù)就是相親數(shù)。
使用Python編程,可以比較輕松地找出相親數(shù)。以下是代碼示例:
def sum_divisors(num): # 計算一個數(shù)的因子之和 divisors = [1] for i in range(2, int(num ** 0.5) + 1): if num % i == 0: divisors.append(i) if i != num // i: divisors.append(num // i) return sum(divisors) def find_amicable_numbers(n): # 找出小于n的所有相親數(shù) amicable_numbers = [] for i in range(1, n): j = sum_divisors(i) if sum_divisors(j) == i and i != j: amicable_numbers.append((i, j)) return amicable_numbers print(find_amicable_numbers(10000))
在上述代碼中,我們定義了兩個函數(shù)。第一個函數(shù)sum_divisors
計算一個數(shù)的所有因子之和。我們需要先列出這個數(shù)的所有因子,再將它們相加。為了優(yōu)化效率,可以只循環(huán)到這個數(shù)的平方根。
第二個函數(shù)find_amicable_numbers
使用sum_divisors
函數(shù)找出小于n的所有相親數(shù)。我們循環(huán)遍歷每個數(shù)i,找到它的因子之和j。如果j的因子之和又等于i,并且i不等于j,那么它們就是一組相親數(shù)。
最后,我們調(diào)用find_amicable_numbers(10000)
,讓代碼找出小于10000的所有相親數(shù)。輸出結(jié)果是一個由多個數(shù)對組成的列表。