亲密数对(难度:半颗星)
问题描述:
输出【1,100000】范围内的错有亲密数对。
如果说n和m是一个亲密数对,那么它们必须满足以下条件
- n的全部因子之和(不包括n)必须等于m
- m的全部因子之和(不包括m)必须等于n
例如:
220的全部因子之和为:
1+2+4+5+10+11+20+22+44+55+110=284
284的全部因子之和为:
1+2+4+71+142=220
所以220和284是一对个亲密数对,输出格式:220->284
参考代码:
#include <stdio.h>
#include <math.h>
int GetFactorSum(int n)
{
int i, sum = 0;
for (i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
if (i == 1 || i * i == n)
sum += i;
else
sum += i + n / i;
}
}
return sum;
}
int main()
{
int i, num;
for (i = 2; i <= 100000; i++)
{
num = GetFactorSum(i);
if (GetFactorSum(num) == i && i < num)
printf("%d->%d\n", i, num);
}
return 0;
}
运行结果:
还没有评论,来说两句吧...