首页 > 编程笔记 > C语言笔记

求亲密数的C语言程序(有源码有解析)

亲密数是数学中一个有趣的概念,它描述了一对特殊的正整数之间的关系。在两个正整之间,如果它们其中一个数的所有真因子(除了数本身以外的所有正因子)之和等于另一个数,同时,另一个数的所有真因子之和也等于第一个数,那么它们就被成为亲密数。
 

让我们来深入理解这个概念。220 的真因子包括 1、2、4、5、10、11、20、22、44、55 和 110,将这些因子相加,我们得到:1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284。同样地,284 的真因子是 1、2、4、71 和 142,它们的和恰好是 220。这种独特的关系使得 220 和 284 成为一对亲密数。
 

现在,让我们探讨如何用C语言编写一个程序来寻找亲密数。我们的方法将包括以下几个关键步骤:

让我们来看看具体的C语言实现:

#include <stdio.h>

// 计算一个数的真因子之和
int sumOfFactors(int num) {
    int sum = 1;  // 1 总是任何数的因子
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            sum += i;
            if (i * i != num) {
                sum += num / i;
            }
        }
    }
    return sum;
}

// 在给定范围内寻找亲密数
void findAmicableNumbers(int start, int end) {
    for (int a = start; a <= end; a++) {
        int b = sumOfFactors(a);
        if (b > a && b <= end && sumOfFactors(b) == a) {
            printf("%d 和 %d 是一对亲密数\n", a, b);
        }
    }
}

int main() {
    int start = 1, end = 10000;
    printf("在 %d 到 %d 之间的亲密数对:\n", start, end);
    findAmicableNumbers(start, end);
    return 0;
}

这段代码中,sumOfFactors 函数用于计算一个数的真因子之和,它采用了一种优化的方法,只遍历到平方根,这大大提高了效率。
 

findAmicableNumbers 函数在给定范围内搜索亲密数对。它遍历范围内的每个数 a,计算其真因子之和 b,然后检查 b 的真因子之和是否等于 a。如果是,并且 b 大于 a(避免重复输出),就找到了一对亲密数。


在 main 函数中,我们设定了搜索范围从 1 到 10000。这个范围可以根据需要调整,但要注意,随着范围的增大,程序的运行时间也会显著增加。
 

运行这个程序,我们会得到如下输出:

在 1 到 10000 之间的亲密数对:
220 和 284 是一对亲密数
1184 和 1210 是一对亲密数
2620 和 2924 是一对亲密数
5020 和 5564 是一对亲密数
6232 和 6368 是一对亲密数

这个程序不仅找到了最著名的 220-284 对,还发现了其他几对亲密数。值得注意的是,亲密数在自然数中相对罕见,这使得它们在数学和编程教学中成为一个有趣的话题。
 

通过这个程序,我们不仅实践了数论中的一个有趣概念,还练习了函数的编写、循环控制和条件判断等基本编程技能。对于初学者来说,这是一个很好的练习,可以帮助他们理解如何将数学概念转化为实际的编程问题,并通过逐步分解问题来构建解决方案。

相关文章