100c之26: 寻找亲密数

问题

亲密数:如果整数A的全部因子( 包括1, 不包括A本身 )之和等于B;且整数B的全部因子( 包括1,不包括B ) 之和等于A,则A和B称为亲密数。求 3000以内的全部亲密数

分析

穷举。 我们知道一个数可能的第二大因子是其一半。穷举过程可以使用这一限制降低循环次数。

解决方案

 1:  /**
 2:   * @file   026.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Sun May 26 16:43:14 2013
 5:   * 
 6:   * @brief
 7:   * 
 8:   * 
 9:   */
10:  
11:  #include <stdio.h> 
12:  
13:  int main(int argc, char *argv[])
14:  {
15:      int a,i,b,n;
16:  
17:      printf ("the friend numbers bellow 4000 are\n");
18:  
19:      for (a=1; a <= 4000; ++a)
20:      {
21:          for (b=0,i=1; i <= a/2; ++i)
22:              if (!(a%i)) b+=i;
23:          for (n=0,i=1; i <= b/2; ++i)
24:              if (!(b%i)) n+=i;
25:          if (n==a && a<b)
26:              printf ("%d is friend with %d\n", a,b);
27:      }
28:      return 0;
29:  }
30:  

最终结果

220 is friend with 284
1184 is friend with 1210
2620 is friend with 2924
posted @ 2013-05-26 17:15  emacsun  阅读(233)  评论(0编辑  收藏  举报