OJ 1468 求素数(素数筛)

来源:互联网 发布:qq windows xp 编辑:程序博客网 时间:2024/05/17 22:11


素数筛就是先把2和所有的奇数标记为一,然后再把这些数的倍数标记为零,最后所有标记为一的数都是素数。

#include<stdio.h>#include<math.h>using namespace std;const int inf = 1000050;bool s[1000050];int main(){    int n,i,j;    s[1] = 0;    s[2] = 1;    for(i=3;i<=inf;i++)        s[i]=i%2?1:0;               //当i%2==0时,s[i]=0;s[i]%2==1,s[i]=1.    for(i=2;i<=sqrt(inf);i++)       //最多到sqrt(),就可找完所有的素数    {        if(s[i])                    //去掉所有是剩下的i的倍数的数        {            for(j=i+i;j<=inf;j+=i)                s[j]=0;        }    }    while(scanf("%d",&n),n)    {        int sum=0;        for(i=2;i<=n;i++)            sum+=s[i];        printf("%d\n",sum);    }    return 0;}


0 0