Prelude
线性筛素数qwqqqq
(其实我是懒得写的.....做了两个小时的立体几何要炸了。。。)
emmmmm其实这题我确实想到了筛法qwqqqq
然后当时就这样想的:这方法gg没当面讲过 没讲过那么大部分人都不知道 不知道做出来的人应该很少 人很少而且我做对了 gg会让我讲思路 可是我懒得讲 于是 它就完美的超时了
(其实好吧都是借口
简单描述一下这道题(忘记拷题目辽。。)
给定一个范围1~N,求其中素数的个数。
N超级大大大大大!!!
第一眼是不是感觉超级水。。虽然事实证明真的很水(大家估计都会做orzzzzz)
因为素数的倍数一定不是素数
所以我们用一个长度为N+1的数组保存信息,先假设所有的数都是素数,从第一个素数2开始,把2的倍数都标记为非素数,一直到大于N;然后进行下一趟,找到2后面的下一个素数3,进行同样的处理,直到最后,数组中依然为0的数即为素数。
然后别忘了特殊处理一下1就好了qwqqq
(代码不是自己的....容忍一下的懒惰//捂脸
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char a[30000005]; long long tot = 1; int main() { //freopen("prime.in","r",stdin); //freopen("prime.out","w",stdout); int l; cin>>l; memset(a,48,sizeof(a)); for(int i = 3;i <= l;i += 2) { if(a[i] == '0') { tot++; for(int j = i;j <= l;j += 2 * i) { a[j] = '1'; } } } cout<<tot<<endl; return 0; }
几何有毒www