//使用筛选法得出1~n之间素数
思路:使用1~n的数组prime来指示1到n的数是否为素数。如果prime[i]为0,则为素数。
(1)从2开始,将2*2到n之间的2的倍数删除
(2)从剩下的数据集合中找到最小的素数3,将3*2到n之间3的倍数删除
(3)从剩下的数据集合中找到最小的素数x,将x*2到n之间x的倍数删除
(4)重复(3)步骤直到剩下的数集合为空时,算法结束
#include<stdio.h>
#define SIZE 100
int main(void) {
int prime[SIZE+1]={0};
int i=2;
int j=0;
int n=0;
int mid=0;
printf("输入一个数:");
scanf("%d",&n);
mid=n/2+1;
//使用筛选法得出1~n之间素数
while(i<=mid) {
for(j=i+1;j<=n;++j) { //将i的倍数设置为非素数
if(0==prime[j]&& 0==j%i) //如果是合数
prime[j]=1;
}
++i;
while(prime[i]==1)//找到下一位合数
++i; //后移一位
}
//遍历数组,如果是素数,输出
for(i=1;i<=n;i++)
if(0==prime[i])
printf("%d ",i);
return 0;
}