素数个数
题目描述
编程求 2 2 2 ~ n ( n n(n n(n 为大于 2 2 2 的正整数)中有多少个素数。
输入格式
输入 n ( 2 ≤ n ≤ 50000 ) n(2 \le n \le 50000) n(2≤n≤50000)。
输出格式
素数个数。
样例 #1
样例输入 #1
10
样例输出 #1
4
代码内容
// #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=5e4+10;
bool vis[N];
ll cnt;
int main()
{
ll n;
cin>>n;
//埃氏筛法
for(ll i=2;i<=n;i++)
{
if(vis[i]) continue;
//质数的几倍是合数
for(ll j=i+i;j<=n;j+=i) vis[j]=1;
}
for(ll i=2;i<=n;i++)
{
if(!vis[i]) cnt++;//统计质数
}
cout<<cnt<<endl;
return 0;
}