当前位置: 代码迷 >> C语言 >> 用筛先法求出100以内的素数,
  详细解决方案

用筛先法求出100以内的素数,

热度:258   发布时间:2007-11-28 19:55:54.0
可是,你的算法和我的似乎是一样的嘛………………
到底什么叫筛法啊?
----------------解决方案--------------------------------------------------------
#include<math.h>
#include<stdio.h>
main()
{int i,a[100],x,j;
x=sqrt(100);
for(i=1;i<=100;i++)
a[i]=i;
for(i=2;i<x;i++)
for(j=i+1;j<=100;j++)
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
for(j=2;j<100;j++)
if(a[j]!=0)
printf("%dt",a[j]);
}
这样子应该就行了吧,呵呵!

[[italic] 本帖最后由 freezingdevil 于 2007-11-29 06:44 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<math.h>
void main()
{
    int i,j,h=0;
    int leap=1;
    for(i=1;i<=100;i++)
    {
        int k=sqrt(i+1);
     for(j=2;j<=k;j++)
    
         if (i%j==0)
            { leap=0;
         break;    }
    
     if (leap)
     {
         printf("%-4d",i);
         h++;
         if(h%10==0)
             printf("\n");
     }
     leap=1;

    }
    printf("total is %d\n",h);
}
----------------解决方案--------------------------------------------------------
include<stdio.h>
void main()
{ int i,m=100,n;
while(i<=m/2)
{  if(i%m/2==0)
      break;
    if(i>m/2)
    printf("%d",i);
    n++;
}
if(n==10)  printf("\n");
}
----------------解决方案--------------------------------------------------------
用筛选法求100以内的素数
/*用筛选法求100以内的素数 */

#include "stdio.h"
#include "conio.h"
#define N 100
main()
{ int a[N],i,j,n=0;
  /*数组元素置数,由于1不是素数,从2开始*/
  for(i=1;i<N;i++)
   a[i]=i+1;
  /*筛选,注意用i去除a[j]时,不会去除自身*/
  for(i=2;i<N;i++)
    for(j=i;j<N;j++)
    if(a[j]%i==0) a[j]=0;
  /*输出结果*/
  for(i=1;i<N;i++)
    if(a[i]!=0)
    {printf("%5d",a[i]);
     n++;
     if(!(n%5)) printf("\n");  /*输出五个数后换行*/
    }
  getch();
  }
----------------解决方案--------------------------------------------------------
补充
筛选时,外层循环的条件用 i<sqrt(N),能提高执行效率,但程序前应包含 “math.h”头文件。上面程序在TC2中以调试,13楼的程序好象不是筛选法,14楼的也错了,没有结果。
----------------解决方案--------------------------------------------------------
main()
{int a[100];
  int i,j;
  for(i=1;i<=100;i++)
     a[i]=i;
  a[1]=0;
  for(i=2;i<=sqr(100);i++)
     for(j=1;j<=100;j++)
        if(a[j] % i=0  && a[j]/i!=1)
           a[j]=0;
   for(i=1;i<=100;i++)
       if(a[i]!=0)   pritnf("%d,",a[i]);
}
----------------解决方案--------------------------------------------------------
  相关解决方案