相亲数&完全数最简单算法

今天看到博客园一位仁兄的相亲数,整体感觉不错。

原文出处:http://www.cnblogs.com/devil0153/archive/2010/08/22/AmicablePair-And-PerfectNumber.html 

版权声明版权归作者WeiSteven所有,转载请注明! 

但有些算法感觉有些大材小用,随手写了一个最简单的相亲数的判断程序:

运行效果不是想象中的差,没进行任何的优化:

其中只是避开了分解质因数,求解复杂运算 

 

ExpandedBlockStart.gif 代码
 1  #include  < stdio.h >
 2  #include  < time.h >
 3  /* ----------------
 4  计算相亲数的快速算法
 5  最直接的代码用时:3088ms
 6  平台:T2330 1.6GHZ
 7  ----------------- */
 8  #define  MAX_TEST 5000000
 9  long  nTable[MAX_TEST]; // 素数表
10  char  nFlag[MAX_TEST];
11  // 构造未标记用于降低内存使用
12 
13  void  printConsole()
14  {
15       for ( long  i = 2 ;i < MAX_TEST;i ++ )
16      {
17           if (nFlag[i] == 0 )
18          {
19               if (nTable[i] < MAX_TEST && (nTable[nTable[i] + 1 ] + 1 == i))
20                  printf( " %ld\t%ld\n " ,i,nTable[i] + 1 );
21              nFlag[nTable[i] + 1 ] = 1 ;
22          }
23      }
24  }
25 
26  int  main()
27  {
28       long  j = 0 ;
29       double  startTime,endTime;
30      startTime = ( double )clock();
31       for ( long  i = 2 ;i < MAX_TEST;i ++ )
32      {
33          j = (i << 1 );
34           while (j < MAX_TEST)
35          {
36              nTable[j] += i;
37              j += i;
38          }
39      }
40      endTime = ( double )clock();
41      printf( " Total Run Time:%f\n " ,endTime - startTime);
42       // printf("数值:%ld\n",nTable[220]);
43      printConsole();
44       return   1 ;
45  }

 

 

 

转载于:https://www.cnblogs.com/weisteve/archive/2010/08/23/1806204.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值