親密數指兩個數中,其中一個數的所有真因數之和等于另一個數,且反過來也成立。
例如,220和284是一對親密數,因為:
真因數之和: 220 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 284 = 1 + 2 + 4 + 71 + 142 = 220
python可以通過循環遍歷來求解親密數。首先,我們可以寫一個函數來計算給定數num的所有真因數之和。
def divisors_sum(num): divisors = [1] for i in range(2, int(num**(1/2))+1): if num % i == 0: divisors.append(i) if i != num//i: divisors.append(num//i) return sum(divisors)
然后,我們可以使用雙重循環來查找一對親密數。
for i in range(2, 10000): div_sum_i = divisors_sum(i) for j in range(i+1, 10000): if div_sum_i == j and divisors_sum(j) == i: print(i, j)
代碼中的第一個循環從2到10000遍歷每個數,第二個循環從i+1到10000遍歷每個比i大的數。對于每個數對(i, j),我們都計算它們的真因數之和,并檢查它們是否互相等于對方。如果是,就打印出這對親密數。
運行以上代碼,輸出如下:
220 284 1184 1210 2620 2924 5020 5564 6232 6368
這里只列出了前5對親密數,實際上還有很多對。