| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3140 人关注过本帖, 2 人收藏
标题:看看我的这个Erastothens有多高效.
取消只看楼主 加入收藏
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
结帖率:100%
收藏(2)
 问题点数:0 回复次数:2 
看看我的这个Erastothens有多高效.
传统的写法.
程序代码:
#include <stdio.h>
#include <math.h>
#define  cnt  50000000
int main(void)
{
    int i;
    int j;
    int a[cnt];               

    for (i = 1; i <= cnt; i++) 
        a[i] = i;

    for (i = 2; i < sqrt(cnt); i++)     
        for (j = i + 1; j <= cnt; j++)  
        {
            if (a[i] != 0 && a[j] != 0) 
                if (a[j] % a[i] == 0)
                    a[j] = 0;           
        }
/*
    int n = 0;    

    for (i = 2; i <= cnt; i++)    
    {
        if (a[i] != 0)
        {
            printf("%-5d", a[i]); 
            n++;
        }
        if (n == 10)
        {
            printf("\n");         
            n = 0;
        }
    }
    printf("\n");
*/
    return 0;
}

我的写法
程序代码:
#include <stdio.h>
#define   cnt  50000000
int uDel(int arry[] , int n) {
    int  i  , val;
    for (i = 0 ; i  < n ; i++ ) {
         if (arry[i] == 0)
             continue ;
         else {
                val = arry[i] ;
               return val ;
         }
    }
}

int main(void) {

    int  arry[cnt] ={0,0};
    int  i , j ;
    for (j = 2 ; j < cnt ; j++ )
         arry[j] = j ;
         
    for (i = uDel(arry,cnt) ; i * i <= cnt ; i = uDel(arry , cnt)) {
         // printf("%d " , i) ;
          for (j = 1 ; j * i < cnt ; j++) 
               arry[j * i] = 0 ;
          
    }
    /* for ( i = 0 ; i < cnt ; i++) 
        if (arry[i] != 0 )
         printf("%d " , arry[i]) ;  
    */
  
  return 0 ;
}

注意上面 cnt 50000000 是我在unix-center上的服务器测试用的,普通的pc的内存早就超出了限制.在你机器上适当的改小.
另外,把输出语句注释掉是应为printf太耗时,这里单纯的比较算法.我在unix-center上的一台freebsd6.2系统上分别运行(数量级50000000)了两个程序,我的在2秒内完成,而传统的写法我等了2分多钟.
收到的鲜花
  • 广陵绝唱2008-12-10 18:29 送鲜花  49朵   附言:原创内容
搜索更多相关主题的帖子: Erastothens 
2008-12-10 18:19
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
多谢各位捧场.to 老K,你给我买个新的键盘如何

without further ado, let’s get started
2008-12-11 11:21
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
多谢各位捧场.to 老K,你给我买个新的键盘如何

许久不见vxworks了

without further ado, let’s get started
2008-12-11 11:27
快速回复:看看我的这个Erastothens有多高效.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022695 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved