1. 程式人生 > >快速線性篩素數

快速線性篩素數

#include<stdio.h>
#include<string.h>
const int maxn = 1e7+7;
bool isprime[maxn];
int prime[maxn];

int main()
{
    int n;
    scanf("%d",&n);
    int cnt = 0;
    memset(isprime,true,sizeof(isprime));
    for(int i = 2; i <= n; i++)
    {
        if(isprime[i])
            prime[cnt++] = i;
        for(int j = 0; j < cnt && i*prime[j] <= n; j++)
        {
            isprime[i*prime[j]] = false;
            if(i%prime[j] == 0) break;
        }
    }
    int ans = 0;
    for(int i = 2;i <= n;i++)
        if(isprime[i]) ans++;
    printf("%d\n",ans);
    return 0;
}