您的位置:首页 > 其它

【数论】(贾志鹏)线性欧拉筛模板&&CODE[VS] 1453 统计素数个数2

2016-11-10 11:54 621 查看
点击进入异世界

详情请百度“贾志鹏线性筛”

每次只用最小的素数筛去,时间复杂度为线性的O(n)比埃筛快

但空间复杂度比埃筛大些

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#define maxn 13333333

using namespace std;

typedef long long LL;

LL l,r;
LL n;
LL prime[maxn];
LL used[maxn];

inline LL read()
{
char ch;
LL data = 0;
LL f = 1;
while(ch <'0'|| ch >'9')
{
if(ch == '-')
{
f = -1;
}
ch = getchar();
}
do{
data = data*10+ch-'0';
ch = getchar();
}while(ch >='0'&&ch <='9');

return data * f;
}

LL cnt = 0;

inline void isprime(LL x)
{
memset(used,0,sizeof(used));
for(LL i = 2;i <= x;i++)
{
if(used[i] == 0) prime[++cnt] = i;
for(LL j = 1;j <= cnt && i*prime[j] <= x;j++)
{
used[i * prime[j]] = 1;
//cout<<used[i * prime[j]]<<endl;
if(i%prime[j] == 0) break;
}
}
}

LL ans = 0;

int main()
{

l = read();
r = read();
isprime(r);
for(LL i = 0;i <= cnt;i++)
if(prime[i] >= l&&prime[i] <= r) ans++;
printf("%lld\n",ans);
return 0;
}


THE END

By Peacefuldoge

http://blog.csdn.net/loi_peacefuldog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  素数 线性筛 筛法