心有灵犀数
如果整数A的全部因子(不包括A)之和等于B,且整数B的全部因子(不包括B)之和等于A,则将A和B称为亲密数,如220的全部因子(不包括220)之和:1+2+4+5+10+11+20+22+44+55+110等于284,284的全部因子(不包括284)之和:1+2+4+71+142等于220,故220和284为亲密数。求10000以内的所有亲密数。
采用穷举法对10000以内的数逐个求因子,并求出所有因子之和sum1,再对所求出的和sum1求因子,并再次求所有因子之和sum2,此时按亲密数的要求进行进一步筛选便求出最终结果。
void main()
{
int i, j, k, sum1, sum2; /定义变量为基本整型 /
for (i = 1; i <= 10000; i++) /对10000以内的数进行穷举 /
{
sum1 = 0;
sum2 = 0;
for (j = 1; j < i; j++)
if (i % j == 0) /判断j是否为i的因子 /
sum1 += j; /求因子之和 /
for (k = 1; k < sum1; k++)
if (sum1 % k == 0) /判断k是否是sum1的因子 /
sum2 += k; /求因子的和 /
if (sum2 == i && i != sum1 )
printf("%5d=>%5d\n", i, sum1); /输出亲密数 /
}
}