判决素数个数
题目描述
求 X X X, Y Y Y 之间的素数个数(包括 X X X 和 Y Y Y)。
输入格式
两个整数 X X X 和 Y Y Y( 1 ≤ X , Y ≤ 1.1 × 1 0 6 1 \le X,Y \le 1.1 \times 10^6 1≤X,Y≤1.1×106)。
输出格式
输出一个整数,表示 X , Y X, Y X,Y 之间的素数个数(包括 X X X 和 Y Y Y)。
样例 #1
样例输入 #1
1 100
样例输出 #1
25
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <sstream>//整型转字符串
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=11e5;
ll pri[N],cnt;
bool vis[N];
int main()
{
ll x,y;
cin>>x>>y;
if(x>y) swap(x,y);
for(ll i=2;i<=y;i++)
{
if(!vis[i]) pri[cnt++]=i;
for(ll j=0;pri[j]*i<=y;j++)
{
vis[pri[j]*i]=1;
if(i%pri[j]==0) break;
}
}
ll ans=upper_bound(pri,pri+cnt,y)-lower_bound(pri,pri+cnt,x);
cout<<ans<<endl;
return 0;
}