Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2507280
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-04-18 12:41:41

    如果整数A的全部因子(包括1,不包括A本身)之和等于B,并且整数B的全部因子(包含1,不包含B本身)之和等于A,称整数A和B为亲密数。求解3000以内的全部亲密数。
    遇到这种题目,我们首先想到的是,我们需要先求出一个数的所有因子之和,然后通过循环去判断两个是否是亲密数。因此通过穷举法,我们即可求出所有的亲密数,代码如下:
  1. #include <stdio.h>
  2. #define N 3000

  3. int factorSum(int n)
  4. {
  5.   int i,sum = 0;
  6.   for(i=1; i<n; i++)
  7.     if(n%i == 0)
  8.       sum += i;

  9.   return sum;
  10. }

  11. int isFriend(int num1, int num2, int sum1, int sum2)
  12. {
  13.   if(num1 == sum2 && num2 == sum1)
  14.     return 1;
  15.   else
  16.     return 0;
  17. }

  18. void friendly()
  19. {
  20.   int i,j,x[N];
  21.   for(i=0;i<N;i++)
  22.     x[i] = factorSum(i+1);

  23.   for(i=0; i<N; i++){
  24.     if(x[i] != -1){
  25.       for(j=i+1; j<N; j++)
  26.         if(isFriend(x[i],x[j],i+1,j+1)){
  27.           printf("(%d,%d) ",i+1,j+1);
  28.           x[j] = -1;
  29.         }
  30.     }
  31.   }
  32. }

  33. int main(int argc, char* argv[])
  34. {
  35.   printf("there are following friendly numbers from 1 to %d \n",N);
  36.   friendly();
  37.   printf("\n");
  38.   return 0;
  39. }
执行结果如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
there are following friendly numbers from 1 to 3000
(220,284) (1184,1210) (2620,2924)

阅读(2839) | 评论(0) | 转发(0) |
0

上一篇:完全数

下一篇:数字翻译器

给主人留下些什么吧!~~