• 素数密度(洛谷 1835)


    题目描述

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

    输入输出格式

    输入格式:

    两个数L和R。

    输出格式:

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

    输入输出样例

    输入样例#1:
    2 11
    输出样例#1:
    5
    /*
      首先筛出sqrt以内的素数,用这些素数来筛a~b内的素数。
      尽管数很大,但是范围不大,所以可以把这些数压进1000000的数组中。 
    */
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #define N 50010
    #define M 1000010
    using namespace std;
    int prime[N/10],f[N],h[M],num,a,b;
    void gprime(){
        int n=min(N-10,(int)sqrt(b));
        for(int i=2;i<=n;i++){
            if(!f[i])prime[++num]=i;
            for(int j=1;j<=num;j++){
                if(i*prime[j]>n)break;
                f[i*prime[j]]=1;
                if(i%prime[j]==0)break;
            }
        }
    }
    int main(){
        scanf("%d%d",&a,&b);
        gprime();
        for(int i=1;i<=num;i++){
            int x=b/prime[i]*prime[i];//找出b以内的prime[i]的最大倍数 
            while(x>prime[i]&&x>=a){//之所以是 > prime[i] 而不是 >= ,是因为prime[i]也是素数 
                h[x-a]=1;x-=prime[i];//筛掉a~b之内的素数 
            }
        }
        int ans=0;
        for(int i=0;i<=b-a;i++)
          if(!h[i]){
              ans++;
          }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    获得客户端的信息
    JavaScript--垃圾回收器
    JavaScript--函数-按值传递
    JavaScript--声明提前
    JavaScript--函数-01
    JavaScript--赋值表达式(typeof-delete-void)
    JavaScript—赋值表达式-1
    JavaScript--机选双色球
    正则表达式的预判
    自定义比较器函数
  • 原文地址:https://www.cnblogs.com/harden/p/6055541.html
Copyright © 2020-2023  润新知