关于筛质数
我扔:https://www.luogu.org/problemnew/show/P3912
首先是线性筛:
#include<bits/stdc++.h>
using namespace std;
int n;
int prime[10000005], sz;
bool vis[100000005];
void get_prime(){
vis[1] = 1;
for(int i = 2; i <= n; i ++){
if(!vis[i]) prime[++ sz] = i;
for(int j = 1; i * prime[j] <= n && j <= sz; j ++){
vis[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
}
}
}
int main(){
scanf("%d", &n);
get_prime();
printf("%d", sz);
return 0;
}
很明显是卡过去的,那么怎么优化呢?
这时我想了个毒瘤的做法,把vis改成bitset类型
差不多快了一倍,真棒233.