C语言 亲和数
在 C 语言中,亲和数(Amicable Numbers)是指一对不同的自然数,每个数的真因子之和等于另一个数。换句话说,对于一对亲和数 和 ,它们满足以下条件:
其中,sum_of_divisors(n)
表示计算 的真因子之和。真因子是指除了 自身外,能整除 的所有数。
示例
例如,220 和 284 是一对亲和数:
220 的真因子:1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110。
220 的真因子之和:1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284。
284 的真因子:1, 2, 4, 71, 142。
284 的真因子之和:1 + 2 + 4 + 71 + 142 = 220。
C 语言实现
以下是一个 C 语言程序示例,用于找出一对亲和数:
c#include <stdio.h>
// 函数:计算给定数的真因子之和
int sum_of_divisors(int num) {
int sum = 1; // 1 是所有数的真因子
for (int i = 2; i <= num / 2; i++) {
if (num % i == 0) {
sum += i;
}
}
return sum;
}
// 主函数
int main() {
int num1, num2;
// 输入两个数
printf("请输入两个正整数:\n");
scanf("%d %d", &num1, &num2);
// 检查是否为亲和数
if (num1 != num2 && sum_of_divisors(num1) == num2 && sum_of_divisors(num2) == num1) {
printf("%d 和 %d 是一对亲和数。\n", num1, num2);
} else {
printf("%d 和 %d 不是亲和数。\n", num1, num2);
}
return 0;
}
代码解释
sum_of_divisors
函数:- 计算一个正整数的真因子之和。初始化
sum
为 1(1 是所有正整数的真因子)。 - 使用
for
循环遍历 2 到num / 2
的所有数,判断是否能整除num
,如果能则加到sum
中。 - 返回计算出的真因子之和。
- 计算一个正整数的真因子之和。初始化
main
函数:- 提示用户输入两个正整数。
- 使用
scanf
函数读取用户输入的两个数。 - 调用
sum_of_divisors
函数计算两个数的真因子之和,并比较是否符合亲和数的条件。 - 根据比较结果输出是否为亲和数。
注意事项
- 亲和数是对称的,因此检查 和 之间的关系时只需要确保
a
和b
的真因子之和分别等于对方。 - 程序中
sum_of_divisors
函数的时间复杂度是 ,其中n
是待计算的数字,可以通过优化算法来提高效率。 - 该程序适用于处理较小范围内的亲和数。对于更大的范围,可能需要优化算法或使用不同的方法来提高性能。
通过这个示例代码,你可以理解如何在 C 语言中实现亲和数的计算和检查。如果有其他问题或需要进一步的帮助,请告诉我!