题目描述
计算 区间[a,b]的所有质数个数 1≤a<b≤10000001≤a<b≤1000000
输入
两个整数 a, b
输出
区间[a,b]的所有质数个数
样例输入复制
1 10
样例输出复制
4
素数筛法
#include <iostream>
using namespace std;
const int maxn = 1000000+5;
int a, b;
bool book[maxn];
void primer_sieve()
{
book[0] = book[1] = false;
for (int i = 2; i <= b; i++) book[i] = true;
for (int i = 2; i * i <= b; ++i)
if (book[i])
{
for (int j = 2 * i; j <= b; j += i)
book[j] = false;
}
}
int func()
{
int sum = 0;
for (int i = a; i <= b; i++)
if (book[i]) sum++;
return sum;
}
int main()
{
cin >> a >> b;
primer_sieve();
cout << func() << endl;
return 0;
}