zoukankan      html  css  js  c++  java
  • P1835 素数密度_NOI导刊2011提高(04)

    题目描述

    给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数。

    输入输出格式

    输入格式:

    两个数L和R。

    输出格式:

    一行,区间中素数的个数。

    输入输出样例

    输入样例#1:
    2 11
    输出样例#1:
    5

    AC代码:

    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int N=1e6+100;
    int ans,l,r,k1,k2,L;//k1,k2是为了以一次除法代替大量乘法运算
    bool f,check[N];
    int main(){
        scanf("%d%d",&l,&r);
        L=r-l+1;
        if(l<2) l=2;
        k1=sqrt(r+0.5);
        for(int j,i=2;i<=k1;i++){
            if(i>=l&&check[i-l]) continue;
            k2=r/i;
            f=1;
            for(j=l/i;j<=k2;j++) if(j>1){
                if(f&&i*j<l){f=0;continue;}//f是为了防止i*j-l<0致使数组溢出,只判一次节省时间
                check[i*j-l]=1;
            }
        }
        for(int i=0;i<L;i++) if(!check[i]) ans++;
        printf("%d",ans);
        return 0;
    } 
  • 相关阅读:
    poj1087最大流拆点
    3月15上午的函数练习
    3月15
    3月13上午
    3月13
    3月12
    break语句
    3月11
    3月10号
    3月9号
  • 原文地址:https://www.cnblogs.com/shenben/p/6054288.html
Copyright © 2011-2022 走看看