Eratosthenes筛法

来源:互联网 发布:存量房数据采集 编辑:程序博客网 时间:2024/06/08 09:04

一、

紫书内的代码

memset(vis,0,sizeof(vis));for(int i=2;i<=n;i++)for(int j=i*i;j<=n;j+=i)vis[j]=1;//优化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[maxn];      //记录素数 bool is_prime[maxn];  //记录是否是素数 int Eratosthenes(int n){    int num = 0;    for(int i = 0; i <= n; ++i)        is_prime[i] = true;//假设全部都是素数     is_prime[0] = is_prime[1] = false;    for (int i = 2; i <= n; ++i){           if(is_prime[i]){            prime[num++] = i;            for(int j = i + i; j <= n; j += i)                  is_prime[j] = false;        }    }    return p;   //返回素数个数}