六六互联

计算机一维数组应用案例

break-word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">案例描述】

break-word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">利用筛选法求[2,n](n<100)上的质数个数。

筛选法:删除最小数的m倍数(m>1)。如此重复,直到无数可删除。

计算机一维数组应用案例

案例分析】

利用筛选法的基本思路是:

1、将[0,99]上的全部整数作上删除标记:int a[100]={1,1,0};

其中a[0]=1,a[1]=1,表示数0、1已删除。a[k]=0,k=2,3,...,99,表示数k未删除。

2、在[b,n]上查找未作删除标记的最小整数b(b的初值为2):

(1)如果b未找到,转3

(2)在(b,n]上对b的倍数作删除标记

(3)b++,转2

3、输出[0,n]上未作删除标记的全部整数

计算机一维数组应用案例

【参考代码】

main()

{ int n,i,s=0,t,b=2,a[100]={1,1,0};

  scanf("%d",&n);

  while(1)

  {  for(i=b;i<n;i++)

         if(a[i]==0)break;

     if(i>n)break;

     t=i+i;

     while(t<=n){a[t]=1;t+=i;}

     b++;

  }

  for(i=2;i<=n;i++)

  if(a[i]==0)s++;

  printf("%d",s);}


相关推荐