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

转载于:https://www.cnblogs.com/chaolong/archive/2013/05/26/3100174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值