题解 | 几乎是质数
几乎是质数
https://www.nowcoder.com/practice/bbcb0e0f5aad46f4920ee85c3ed5d34b
素数筛获取全部素数,再统计每个数的素因子数
#include <iostream>
#include<vector>
using namespace std;
int main() {
int n;
cin>>n;
if(n<6){
cout<<0<<endl;
return 0;
}
vector<bool>is_prime(n+1,true);
is_prime[0]=is_prime[1]=false;
for(int i=2;i*i<=n;i++){
if(is_prime[i]){
for(int j=i*i;j<=n;j+=i){
is_prime[j]=false;
}
}
}
vector<int>prime;
for(int i=2;i<=n;i++){
if(is_prime[i])prime.push_back(i);
}
vector<int>factor_cnt(n+1,0);
for(int p:prime){
for(int num=p;num<=n;num+=p){
factor_cnt[num]++;
}
}
int cnt=0;
for(int i=6;i<=n;i++){
if(factor_cnt[i]==2)cnt++;
}
cout<<cnt<<endl;
return 0;
}

查看8道真题和解析