| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 534 人关注过本帖
标题:大家都来看看!!
只看楼主 加入收藏
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
结帖率:89.66%
收藏
已结贴  问题点数:20 回复次数:8 
大家都来看看!!
看到用Eratosthenes筛选法求质数时,《c和指针》这本书上给了一个答案,我看了半天,也没看懂个大概,还请哪位高手帮解释一下!
程序代码:
  #include <stdlib.h>

  #define SIZE       1000 

  #define TRUE       1
  #define FALSE      0 

  int
  main()
  {
            char     sieve[ SIZE ];
                        char     *sp;
            int      number;
            for( sp = sieve; sp < &sieve[ SIZE ]; )
                     *sp++ = TRUE;
            for( number = 3; ; number += 2 ){
                      sp = &sieve[ 0 ] + ( number – 3 ) / 2;
                      if( sp >= &sieve[ SIZE ] )
                                break;
                      while( sp += number, sp < &sieve[ SIZE ] )
                                *sp = FALSE;
            }
                printf( "2\n" );
            for( number = 3, sp = &sieve[ 0 ];
                 sp < &sieve[ SIZE ];
                 number += 2, sp++ ){
                      if( *sp )
                                printf( "%d\n", number );
            } 

            return EXIT_SUCCESS;
  } 
希望能讲解详细点!可是这样一个题,我自己写了一个,感觉很简单,贴出来看看!!
程序代码:
                #include <stdio.h>
                int main(void)
                {  int a[1000];
                   int i;
                   for(i=2;i<1000;i++)
                      a[i]=i;
                   printf("\n");
                   for(i=4;i<1000;i+=2)
                    a[i]=0;
                   for(i=3;i<1000;i+=3)
                     a[i]=0;
                   for(i=5;i<1000;i+=5)
                     a[i]=0;
                     i=0;
                   while(i<1000)
                     { if(a[i]!=0)
                        printf("%4d",a[i]);
                        i++;

                     }
                   getch();
                 }

这样就可以得到结果了!也不知道那种方法好,还请各位大牛答疑解惑啊,如果大家还有更好的程序代码,能否发上来看看,学习一下!!
搜索更多相关主题的帖子: 答案 
2010-12-05 16:18
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:5 
这个我也看到过,我当时就是缩小范围,把100逐步缩小,然后在纸上写出分析步鄹搞定了的,楼主不妨试下
2010-12-05 16:19
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:5 
顶下, 原来是有出处的啊 。/

我就是真命天子,顺我者生,逆我者死!
2010-12-05 16:22
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
一直没看过什么《c和指针》之类的,没想还漏了一个经常提及的算法 。/ 果断去下载

我就是真命天子,顺我者生,逆我者死!
2010-12-05 16:30
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
????

付出终将有回报!Ibelieve!
2010-12-05 16:33
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
在没有给定场合下,算法的优劣无法定论,

[ 本帖最后由 BlueGuy 于 2010-12-5 16:37 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-12-05 16:35
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:5 
呵呵 试试2楼的方法 似乎真的可以

粗心是大敌
2010-12-05 20:57
lpz369
Rank: 1
等 级:新手上路
帖 子:2
专家分:8
注 册:2010-10-28
收藏
得分:5 
回复 7楼 zzgzzg00
第一次回帖…顶了
2010-12-06 21:51
shjinyuan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-6-7
收藏
得分:0 
    for( number = 3; ; number += 2 ){
                      sp = &sieve[ 0 ] + ( number – 3 ) / 2;
                      if( sp >= &sieve[ SIZE ] )
                                break;
                      while( sp += number, sp < &sieve[ SIZE ] )
                                *sp = FALSE;
            }
while( sp += number, sp < &sieve[ SIZE ] )这里是找到了素数之后把它的倍数全值为0,
那sp = &sieve[ 0 ] + ( number – 3 ) / 2;就很奇怪了,为什么要去除以2呢,不是只要去找奇数就行了吗
2012-06-07 07:51
快速回复:大家都来看看!!
数据加载中...
 
   



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

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