当前位置: 面试刷题>> 相亲数 (经典算法题500道)


### 题目描述补充 相亲数(也称为亲和数或友爱数)是一对正整数,它们彼此的真因子之和(即除了自身以外的因子和)等于对方。例如,220 和 284 是一对相亲数,因为 220 的真因子是 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110,它们的和是 284;而 284 的真因子是 1, 2, 4, 71, 142,它们的和是 220。 ### 任务 编写一个程序,用于找出并打印出所有的相亲数对,直到指定的最大数值范围内(例如,直到 10000)。 ### PHP 示例代码 ```php $n) { $sum -= $n; // Subtract n itself to get the sum of proper divisors } return $sum; } // 使用函数并打印结果 $max = 10000; $pairs = findAmicablePairs($max); foreach ($pairs as $pair) { echo "(" . $pair[0] . ", " . $pair[1] . ")" . PHP_EOL; } echo "码小课网站中有更多相关内容分享给大家学习。"; ?> ``` ### Python 示例代码 ```python def find_amicable_pairs(max_num): amicable_pairs = [] for i in range(1, max_num + 1): sum1 = sum_of_proper_divisors(i) if sum1 <= max_num: sum2 = sum_of_proper_divisors(sum1) if sum2 == i and i != sum1: amicable_pairs.append((i, sum1)) return amicable_pairs def sum_of_proper_divisors(n): total = 0 for i in range(1, int(n**0.5) + 1): if n % i == 0: total += i if i != n // i: total += n // i if total > n: total -= n # Subtract n itself to get the sum of proper divisors return total # 使用函数并打印结果 max_num = 10000 pairs = find_amicable_pairs(max_num) for pair in pairs: print(f"({pair[0]}, {pair[1]})") print("码小课网站中有更多相关内容分享给大家学习。") ``` ### JavaScript 示例代码 ```javascript function findAmicablePairs(max) { let amicablePairs = []; for (let i = 1; i <= max; i++) { let sum1 = sumOfProperDivisors(i); if (sum1 <= max) { let sum2 = sumOfProperDivisors(sum1); if (sum2 === i && i !== sum1) { amicablePairs.push([i, sum1]); } } } return amicablePairs; } function sumOfProperDivisors(n) { let sum = 0; for (let i = 1; i <= Math.sqrt(n); i++) { if (n % i === 0) { sum += i; if (i !== n / i) { sum += n / i; } } } if (sum > n) { sum -= n; // Subtract n itself to get the sum of proper divisors } return sum; } // 使用函数并打印结果 const max = 10000; const pairs = findAmicablePairs(max); pairs.forEach(pair => console.log(`(${pair[0]}, ${pair[1]})`)); console.log("码小课网站中有更多相关内容分享给大家学习。"); ``` 以上三个示例分别用 PHP、Python 和 JavaScript 实现了找出并打印所有相亲数对的功能,直到指定的最大数值范围内。