题目:给定数n输出里面素数的个数。
tip:三种做法
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
const int maxn=1e8;
vector<int> prime(maxn,0);
vector<int>ans;
int cnt=0;
void isprime0(int n) {//O(n*sqrt(n))
for(int i=2; i<=n; ++i) {
for(int j=2; i!=2&& j<=sqrt(i)+1; ++j)
if(i%j==0)//定义法
{
prime[i]=1;
break;
}
if(!prime[i])
ans.push_back(i);
}
}
void isprime1(int n) {//埃氏筛选法 O(nloglog(n))
for(int i=2; i<=n; ++i)
if(!prime[i]) {
ans.push_back(i);
for(int j=2*i; j<=n; j+=i)
prime[j]=1;
}
}
void isprime2(int n) {//O(n)
for(int i=2; i<=n; ++i) {
if(!prime[i]) {
ans.push_back(i);
cnt++;
}
for(int j=0; j<cnt&&i*ans[j]<=n; ++j) {//用到了所有合数都可以表示成素数之积
prime[i*ans[j]]=1;
if(i%ans[j]==0)
break;
}
}
}
int main() {
int n;
cin>>n;
isprime0(n);
cout<<ans.size()<<endl;
// for(int i=0; i<ans.size(); ++i)
// cout<<ans[i]<<" ";
return 0;
}