Amicable numbers คือเลขสองตัวที่ต่างกัน ผลรวม proper divisors ของแต่ละตัวเท่ากับอีกตัว (Proper divisor คือตัวหารบวกของตัวเลข ยกเว้นตัวมันเอง เช่น proper divisors ของ 6 คือ 1, 2, 3)
ใน Python หาได้โดยหาผลรวมแต่ละตัวและเปรียบเทียบกับอีกตัว
def are_amicable(x, y):
if x == y:
return False
# หาผลรวม proper divisors
sum_x = sum(e for e in range(1, x//2+1) if x % e == 0)
sum_y = sum(e for e in range(1, y//2+1) if y % e == 0)
# คืน True ถ้าเงื่อนไขตรง
return sum_x == y and sum_y == x
print(are_amicable(15, 20))
print(are_amicable(220, 284))
ผลลัพธ์
False True