两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。从键盘输入正整数n,求n以内的全部亲密数。 示例: 输入格式:3000 输出格式:220 284;1184 1210;2620 2924;(注意:式子中同一组数据间用一个空格隔开,不同组数据间用分号隔开,所有符号均为英文状态下的符号) 用c语言
时间: 2023-06-12 18:05:05 浏览: 239
以下是C语言代码实现:
```c
#include <stdio.h>
// 求一个数的因子之和
int getDivisorSum(int n) {
int sum = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
sum += i;
}
}
return sum;
}
int main() {
int n;
scanf("%d", &n);
// 遍历n以内的所有数,寻找亲密数
for (int i = 1; i <= n; i++) {
int sum1 = getDivisorSum(i); // i的因子之和
if (sum1 > i && sum1 <= n) { // 只需要判断比i大且小于等于n的数
int sum2 = getDivisorSum(sum1); // sum1的因子之和
if (sum2 == i) { // 如果sum2等于i,则i和sum1是一组亲密数
printf("%d %d;", i, sum1);
}
}
}
return 0;
}
```
输入一个正整数n,程序会遍历n以内的所有数,对于每个数i,求出它的因子之和sum1,然后再求出sum1的因子之和sum2,如果sum2等于i,则i和sum1是一组亲密数,输出即可。需要注意的是,只需要判断比i大且小于等于n的数即可。输出格式按照题目要求即可,同一组数据间用一个空格隔开,不同组数据间用分号隔开。
阅读全文