Eratosthenes筛选法

来源:互联网 发布:snmp linux版本查询 编辑:程序博客网 时间:2024/06/14 18:06

比起C++版,有点太费空间,弃用。参见:Eratosthenes筛选法(C++版)。

Sieve of Eratosthenes

使用埃拉托斯特尼筛选法计算小于100000的素数。

埃拉托斯特尼筛选法是最为知名的产生素数的筛选法,适用于产生最小的N个素数。

该方法的唯一缺点是使用的存储空间大,可以进一步改进。

另外,该算法也不适用于计算某个范围内的全部素数。

/* 筛选法计算小于100000的素数 * * 筛选法求最小的素数序列,原本是不朽的数学家们手工计算的方法, * 稍微费点空间,也是适合于计算机进行计算的算法, */#include <stdio.h>#include <math.h>#define MAX 100000int arr[MAX+1] = {0, 0, 1};int main(void){    int i,j;    int num=0;    // 初始化    for(i=3; i<MAX; i++) {        arr[i++] = 1;        arr[i] = 0;    }    int max = sqrt(MAX);    for(i=3; i<=max; i++){        if(arr[i]) {            for(j=i+i; j < MAX; j+=i)    //进行筛选                arr[j]=0;        }    }    for(i=2;i<MAX;i++){        if(arr[i]){            ++num;            printf("%d:%d\n", num, i);        }    }    return 0;}


1 0