c语言用函数求亲密数
时间: 2024-11-20 15:35:30 浏览: 19
在C语言中,亲密数(Amicable numbers)是一对正整数,它们的和等于这两个数的最大公约数(Greatest Common Divisor, GCD)的两倍。要编写一个函数来寻找亲密数,我们可以按照以下步骤进行:
1. 定义一个函数`find_divisors()`用于找出给定数的所有因子。
2. 定义另一个函数`amicable_pairs()`,在这个函数里遍历从2开始到某个上限,检查每一对数字是否互为亲密数。
以下是简单的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
// 函数来计算最大公约数
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
// 找出给定数的因子
void find_factors(int num, int* factors, int* count) {
*count = 0;
for (int i = 1; i <= sqrt(num); i++) {
if (num % i == 0) {
factors[*count] = i;
(*count)++;
if (i != num / i) { // 如果不是完全平方数,再加另一个因子
factors[(*count)-1] = num / i;
(*count)++;
}
}
}
}
// 检查两个数是否构成亲密数
bool are_amicable(int num1, int num2) {
int divisors_sum1 = 0, divisors_sum2 = 0;
find_factors(num1, &divisors_sum1, NULL); // 计算第一个数的因子之和
find_factors(num2, &divisors_sum2, NULL);
return (divisors_sum1 == num2 && divisors_sum2 == num1);
}
// 主函数查找并打印亲密数
void search_amicables(int limit) {
for (int i = 2; i < limit; i++) {
int j = i;
if (are_amicable(i, j)) {
printf("%d and %d are amicable numbers.\n", i, j);
}
}
}
int main() {
int max_limit = 10000; // 设置一个搜索上限
search_amicables(max_limit);
return 0;
}
```
这个程序会在指定范围内(这里是1到10000)寻找亲密数。你可以根据需要更改`max_limit`变量来扩大搜索范围。
阅读全文