Eratosthenes筛法

来源:互联网 发布:美国经济数据日历 编辑:程序博客网 时间:2024/06/08 09:50

Eratosthenes筛法



#include <stdio.h>#include <string.h>#include <math.h>//Eratosthenesconst int maxn = 10000000 + 5;const int maxp = 700000;int vis[maxn];int prime[maxp];void sieve(int n)  //screen out the prime numbers{    int m = sqrt(n + 0.5);    memset(vis, 0, sizeof(vis));    for(int i = 2; i <= m; i++)        if(!vis[i])            for(int j = i * i; j <= n; j += i)                vis[j] = 1;}int prime_numbers(int n){    sieve(n);    int c = 0;  //the number of prime numbers    for(int i = 2; i <= n; i++)        if(!vis[i])        {            prime[c] = i;            c++;        }    return c;}//the end of Eratosthenesint main(){    int t;    while(scanf("%d", &t) != EOF)    {        printf("total prime numbers: %d\n\n", prime_numbers(t));        for(int i = 0; i < prime_numbers(t); i++)            printf("%d\n", prime[i]);    }    return 0;}