题意:
给你两个数,a,b,让你求区间[a,b]里面有多少个素数;
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int32_t N = 1e7 + 10;
int t, a, b, mod, ans, ak[N / 100];
vector<int>p;
bool isp[N];
void prime() {
isp[0] = isp[1] = 1;
for(int i = 2; i < N; i++) {
if(!isp[i])
p.push_back(i);
for(int j = 0; j < p.size() && i * p[j] < N; j++) {
isp[i * p[j]] = 1;
if(!(i % p[j]))
break;
}
}
}
int32_t main() {
cin >> t;
int s = 1;
prime();
while(t--) {
cin >> a >> b;
ans = 0;
int n = b - a;
memset(ak, 0, sizeof ak);
for(int i = 0; i < p.size() && p[i] <= sqrt(b); i++) {
int j = 0;
if (a % p[i] != 0 )
j = j - a % p[i] + p[i];
if (a <= p[i])//(j+a) / isprime[i] == 1,则(j+a)是素数,要向下推一个
j += p[i];
for ( ; j <= n; j += p[i])
ak[j] = 1;
}
for(int i = 0; i <= n; i++)
if (!ak[i])
ans++;
if(a == 1)
ans--;
printf("Case %lld: %lld\n", s++, ans);
}
return 0;
}