当前位置: 面试刷题>> 相亲数 (经典算法题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
function findAmicablePairs($max) {
    $amicablePairs = [];
    for ($i = 1; $i <= $max; $i++) {
        $sum1 = sumOfProperDivisors($i);
        if ($sum1 <= $max) {
            $sum2 = sumOfProperDivisors($sum1);
            if ($sum2 == $i && $i != $sum1) {
                $amicablePairs[] = [$i, $sum1];
            }
        }
    }
    return $amicablePairs;
}

function sumOfProperDivisors($n) {
    $sum = 0;
    for ($i = 1; $i <= 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;
}

// 使用函数并打印结果
$max = 10000;
$pairs = findAmicablePairs($max);
foreach ($pairs as $pair) {
    echo "(" . $pair[0] . ", " . $pair[1] . ")" . PHP_EOL;
}
echo "码小课网站中有更多相关内容分享给大家学习。";
?>

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 示例代码

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 实现了找出并打印所有相亲数对的功能,直到指定的最大数值范围内。

推荐面试题