素数的个数
题目描述
给定区间(2≤L≤R≤2147483647,R−L≤10^6 ),请计算区间中素数的个数
输入描述:
输入包括一行,为两个被空格隔开的数:L和R
输出描述:
输出区间[L,R]中素数的个数
示例1
输入
2 20
输出
8
说明
大于等于2小于等于20的素数有:2 3 5 7 11 13 17 19八个数
分析:
数组开不了几十亿那么大,那么就不能直接用埃式筛法,或者欧拉筛法。
要怎么做呢:
一般的欧拉筛都是从前往后依次筛 ,这里由于范围不定,考虑到起始值可能很大,从前往后筛就会做很多不必要的判断,所以就从后往前筛。
AC代码:
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e6+5;
int l,r;
int pri[N];
int main(){
cin>>l>>r;
int flag=sqrt(r);
for(int i=2;i<=flag;++i){
int en=r/