| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2281 人关注过本帖
标题:筛法求100之内素数中的一个问题
只看楼主 加入收藏
xdyuan33
Rank: 3Rank: 3
来 自:广西大学化工学院
等 级:论坛游侠
帖 子:146
专家分:145
注 册:2009-7-24
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:3 
筛法求100之内素数中的一个问题
我自学C快两个月了,回头找练习做发现很多不懂。
第7章数组有个用筛法求100之内素数的题目。
下面是课本习题集上的答案。
想了很久都不明所以,请大哥大姐们指点下啊。

**********************************(1)
#include<math.h>
main()
{ int i,j,a[101],n=0;
  for(i=1;i<=100;i++)
    a[i]=i;
  for(i=2;i<sqrt(100);i++)
    for(j=i+1;j<=100;j++)
      {if(a[j]!=0 && a[i]!=0)  /*我觉得这里还要说if(a[j]!=0 && a[i]!=0)多余                             上两句不是有I从2J从I+1开始,又用I++增吗那不是明显大于0?可我删掉这句时却运行出错*/

        if(a[j]%a[i]==0)  /*这里我又觉得可以设余数不等于0,就说明a[j]是素数了再直接输出a[j] 不知道可以不?*/      
         a[j]=0;}            
   printf("\n");
for(i=2;i<=100;i++)
  { if(a[i]!=0)
     {printf("%5d",a[i]);
      n++;}
    if(n==10)
     {printf("\n");
      n==0;}
   }
}
***********************************(2)
基于上面所说,我就改成这样下面两种都不行。
#include<math.h>
main()
{ int i,j,a[101],n=0;
  for(i=1;i<=100;i++)
    a[i]=i;
  for(i=2;i<sqrt(100);i++)
    for(j=i+1;j<=100;j++)
      { if(a[j]%a[i]!=0)
          { n++;
            printf("%4d",a[j]);
           }
         if(n%5==0) printf("\n");
      }
  
  printf("\nthere are %d prime_number from1_100.",n);
}
**************************************************(3)

#include<math.h>
main()
{ int i,j,a[101],n=0;
  for(i=1;i<=100;i++)
    a[i]=i;
  for(i=2;i<sqrt(100);i++)
    for(j=i+1;j<=100;j++)
      { if(a[j]%a[i]!=0)
          { n++;
            printf("%4d",a[j]);
           }
         if(n%5==0) printf("\n");
      }
  
  printf("\nthere are %d prime_number from1_100.",n);
}
搜索更多相关主题的帖子: 筛法 素数 
2009-08-06 20:29
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
收藏
得分:50 
我理解的筛法是,
找到一个素数,然后把素数的倍数全部标记,下次找的时候只要满足取模的条件,而且是没有被标记过的数就行了,
你删掉的那两句貌似正是用来检测是不是被标记过。
2009-08-06 21:47
xdyuan33
Rank: 3Rank: 3
来 自:广西大学化工学院
等 级:论坛游侠
帖 子:146
专家分:145
注 册:2009-7-24
收藏
得分:0 
回复 2楼 huicpc0876
嗯谢谢了

参与切磋是美德,每天回帖即可获得10分可用分!
2009-08-07 07:52
jdwhf00007
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-8-7
收藏
得分:0 
所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。具体做法如下: 先将1挖掉(因为1不是素数)。 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。 用3去除它后面的各数,把3的倍数挖掉。 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止。#include  #define MAX_NUM 100int main(int argc, char *argv[]){unsigned int buf[MAX_NUM];unsigned int i,j;for (i=0; i<MAX_NUM; i++)buf[i] = i;for (i=2; i<MAX_NUM; i++) //i从2开始{if (buf[i] != 0)    //未被清零,就是前一次遍历未被排除{for (j=i+i; j<MAX_NUM; j+=i) //能被2,3,5.....等整除的一律排除清零buf[j] = 0;}}for (i=2; i<MAX_NUM; i ++){if (buf[i] != 0)printf(”%d ”,i);}return 0;}
2009-08-07 10:50
快速回复:筛法求100之内素数中的一个问题
数据加载中...
 
   



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

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