ʚ˙Ꙫ˙ɞ欧拉筛法
作者:
瑜huang
,
2021-03-07 21:05:41
,
所有人可见
,
阅读 477
欧拉筛求素数:
const int N=1e8+10;
int primes[N];
bool st[N];
void get_primes()
{
int cnt=0;
for(int i=2;i<=N;i++){
if(!st[i]) primes[++cnt]=i;//没有被筛去,说明是质数
for(int j=1;i*primes[j]<=N;j++){
st[i*primes[j]]=true;//筛去合数
if(i%primes[j]==0) break;
}
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e8 + 10;
bool vis[N];
int prime[N], cnt;
int f[N];
void get_prime()
{
vis[1] = true;
for(int i = 2; i <= N; i ++)
{
if(!vis[i]) prime[cnt++] = i;
for(int j = 0; prime[j] * i <= N; j++)
{
vis[prime[j] * i] = 1;
if(i % prime[j] == 0) break;
}
}
}
int main()
{
get_prime();
for(int i = 1; i <= N; i ++)
f[i] = f[i - 1] + (vis[i]==0);
int t; cin >> t;
while(t --)
{
int l, r;
cin >> l >> r;
cout << f[r] - f[l - 1] << endl;
}
return 0;
}