当前位置: 面试刷题>> 相亲数 (经典算法题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 实现了找出并打印所有相亲数对的功能,直到指定的最大数值范围内。