区间内素数的个数

  • Post author:
  • Post category:其他



题目描述

给定整数a和b,请问区间 [a,b)内有多少个素数?


输入

输入包括一行两个正整数a,b

a<b<=10^12

b-a<=10^6


输出

输出区间 [a,b)的素数的个数。

输入样例

22 37

输出样例

3

这道题的主要用到的知识是

区间筛选

题解

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define N 1000
int prime[N];
bool is_prime[N];
bool is_prime_small[N];
int f,i,j,g;
void sieve(int x,int y){
    for(i=2;i<sqrt(y);i++)
    is_prime_small[i]=true;
    for(i=x;i<y;i++)
    is_prime[i]=true;
    for(i=2;i<sqrt(y);i++){
        if(is_prime_small[i]){
            for(j=2*i;j<sqrt(y);j=j+i){
                is_prime_small[j]=false;
            }
            if(x%i==0)
            g=x/i;
            else{
                g=x/i+1;
            }
            for(j=max(2,g)*i;j<=y;j=j+i){
                is_prime[j]=false;
            }
        }
    } 
    return ;
}
int main(){
    int a,b,d=0;
    cin>>a>>b;
    sieve(a,b);
    for(i=a;i<b;i++){
        if(is_prime[i])
        d++;
    }
    if(a==1)
    d--;
    cout<<d;
    return 0;
} 



版权声明:本文为m0_72542983原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。