题目描述
编程求 2~n(n 为大于 2 的正整数)中有多少个素数。
输入格式
输入 n(2≤n≤50000)。
输出格式
素数个数。
输入输出样例
输入 #1
10
输出 #1
4
这道题可以用埃氏筛
关于埃氏筛:
埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,p[50005],cnt;
int main(){
scanf("%d",&n);
for(int i=2;i<=n;i++){ //埃氏筛
if(p[i])continue;
for(int j=i+i;j<=n;j+=i)p[j]=1;
}
for(int i=2;i<=n;i++)if(!p[i])cnt++;
printf("%d",cnt);
return 0;
}