厄拉多赛筛法求素数 编译无错 求指教
基本方法如下:先列出从2~N的全体自然数,其中,2 是素数,在该数列中将2及其倍数去掉;
接下来数列中最小的3是素数,再将数列中的3及其倍数去掉;
接下来数列中最小的5是素数,…,重复该过程,直到数列为空。
每次从数列中取出的最小数构成不超过N的全体素数。
#include<stdio.h>
#include<stdlib.h>
#define N 20
int main()
{
int a[N];
int b[N];
int i=2;
int p=0;
for(i=2;i<N;i++)
{
a[i]=i;
}
for(i=2;i<N;i++)
{
if(0!=a[i])
{
p=a[i];
b[i]=a[i];
for(i=2;i<N;i++)
{
if(!i%p)
a[i]=0;
}
}
}
printf("N=%d 不大于N的素数为:\n",N);
for(i=2;i<N;i++)
{
if(b[i])
printf("%d.\n",b[i]);
}
system("pause");
return 0;
}