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

猜你喜欢

转载自www.cnblogs.com/Grigory/p/10111277.html
今日推荐