1122 问题 B: [C语言训练]亲密数
题目描述
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数
输出
3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号)
一对亲密数只输出一次, 小的在前
样例输出
(220,284)(1184,1210)(2620,2924)
题目分析:
亲密数有两个条件:
A的全部因子之和等于B
B的全部因子之和等于A
A<B
代码操作:
函数judgenumber()是返回参数的因子之和,由要求可知为B,再判断B的因子之和是否为A,如果符合且A<B,则说明为亲密数
#include<iostream> using namespace std; //两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B //且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。 int judgenumber(int n) { int sum = 0; int i; for (i = 1; i <= n / 2; i++) { if (n % i == 0) { sum = sum + i; } } return sum; } int main() { int num; int i; for (i = 2; i < 3000; i++) { num = judgenumber(i); if (judgenumber(num) == i && i < num) { cout << "(" << i << ',' << num << ")"; } } return 0; }