统计素数个数

重新开始

acm.hnust.edu.cn

问题 C: 实验3-3:统计素数个数

时间限制: 2 Sec   内存限制: 128 MB
提交: 2068   解决: 1048
[ 提交][ 状态][ 讨论版]

题目描述

 

从键盘输入一个整数n(98000<=n<=100000),统计1至n范围内素数的个数。

质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。

输入

输入一个整数n(98000<=n<=100000)

输出

素数的个数

样例输入

100000

样例输出

9592
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm>
#include <cmath>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
const int maxn=1<<30;
const int SIZE=1e5+10;
const double pi=acos(-1);
using namespace std;
int prim[SIZE];
void get_prim(){
    memset(prim,0,sizeof(prim));
    for(LL i=2;i<SIZE;i++){
        if(!prim[i]){
            prim[++prim[0]]=i;
            for(LL j=i*i;j<SIZE;j+=i)
                prim[j]=1;
        }
    }
}
int main()
{
    get_prim();
    int n;
    scanf("%d",&n);
    int pos=lower_bound(prim+1,prim+prim[0],n)-prim;
    if(prim[pos]==n)printf("%d\n",pos);
    else printf("%d\n",pos-1);
    return 0;
}


你可能感兴趣的:(统计素数个数)