求质数:筛选法(埃拉托色尼筛法)

所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。

原理

先将所有范围内的正整数列出,构成数集A。
(1) 从A中删去1;
(2) 从A中删去2的整数倍;
(3) 从A中删去3的整数倍;
(4) 从A中删去5的整数倍;

(n) 从A中删去范围k的开方(取整)的整数倍,过程结束。

实现

求100以内所有质数。

#include 
#include 

void prime(int n, int result[]) {
    int i;
    for(i = 0; i <= n; i++) {
        result[i] = i;
    }
    int j;
    for(j = 2; j < sqrt(n); j++) {
        int k;
        for(k = j + 1; k <= n; k++) {
            if(result[k] != 0 && result[k] % j == 0) result[k] = 0;
        }
    }
} 

int main() {
    int a, p[102];
    prime(100, p);
    for(a = 0; a < 100; a++) {
        if(p[a] != 0) printf("%d\n", p[a]);
    }
    return 0;
} 

你可能感兴趣的:(算法)