筛法求素数是一种利用数组的、较快地求得素数的方法。例如,我们用筛法求100以内的所有素数。
首先初始化,将2到100的所有数存到一个数组内,令a[2]=2,a[3]=3,…a[N]=N.依次从数组中筛掉2的倍数,3的倍数,5的倍数,…,sqrt(N)的倍数(所谓“筛掉”即令其为0);这个过程就是筛掉所有素数的倍数,直到a中仅剩下素数为止(剩下的不为0的数不是任何数的倍数)
#include<stdio.h>
#include<math.h>
#define N 100
void PrintPrime(int a[],int n);
void SiftPrime(int a[],int n);
int main()
{
int a[N+1];
SiftPrime(a,N);
PrintPrime(a,N);
return 0;
}
void SiftPrime(int a[],int n)
{
for (int i=2;i<=N;i++){
//初始化
a[i]=i;
}
for (int i=2;i<=sqrt(N);i++){
//筛
for (int j=i+1;j<=N;j++){
if (a[i]!=0 && a[j]!=0 && a[j]%a[i]==0){
a[j]=0;
}
}
}
}
void PrintPrime(int a[],int n)
{
for (int i=2;i<=N;i++){
if (a[i]!=0){
printf("%d\t",a[i]);
}
}
printf("\n");
}
运行结果