如果整数A的全部因子之和等于B,而B的全部因子之和等于A,则为亲密数。求3000以内的亲密数。
(1)应该事先求出1-3000所有数字的整数因子之和,存入一个数组,以提高效率
(2)由于亲密数配对是唯一的,所以如果一个元素在集合中都没有找到亲密数,那么任何一个其他的元素的亲密数也不可能是该元素了,所以其他元素在找亲密数时就不需要再考虑之前已经找过的数字。
源码如下:
#include <stdio.h>
2:
/*求a的因子和*/
4: {
int i, sum = 0;
for(i = 1; i < a; i++)
/*i是a的一个因子*/
/*通过变量sum累加求和*/
/*返回a的因子的和*/
10: }
11:
/*判断a,b是否是亲密数,是亲密数返回1,否则返回0*/
13: {
return 1;
return 0;
16: }
17:
/*寻找1-3000范围内的亲密数*/
19: {
int i , j, x[3001];
for(i = 1; i <= 3000; i++)
22: x[i] = factorSum(i);
23:
for(i = 1; i <= 3000; i++)
25: {
if(x[i] != -111) {
for(j = i + 1; j <= 3000; j++)
if(isfriend(x[i], x[j], i, j))
29: {
, i, j);
/*表示j已经找到亲密数*/
32: }
33: }
34: }
35: }
36:
int main()
38: {
);
40: friendly();
return 0;
42: }
43: