[luoguP1835] 素数密度_NOI导刊2011提高(04)(素数筛)
Posted 蒟蒻zht的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[luoguP1835] 素数密度_NOI导刊2011提高(04)(素数筛)相关的知识,希望对你有一定的参考价值。
数据辣么大,怎么搞?(L≤R≤2147483647)
注意到R-L≤1000000
所以可以直接筛R-L区间内的数,
但是需要用已知的小的素数筛,
R-L区间内的大部分数肯定能用较小的素数筛去,但是还有一些较大的数,可能等于两个大质数的乘积,没法被筛去。
但是又注意到,数据最大才10位,也就是说我们只需要用位数<=5的素数筛就可以了,所以先预处理出来,直接筛就ok了。
#include <cstdio> #define N 1000001 #define max(x, y) ((x) > (y) ? (x) : (y)) int L, R, cnt, ans; int prime[N]; bool notprime[N], ansprime[N]; int main() { int i, j; scanf("%d %d", &L, &R); notprime[0] = notprime[1] = 1; for(i = 2; i <= 100000; i++) { if(!notprime[i]) prime[++cnt] = i; for(j = i + i; j <= 100000; j += i) notprime[j] = 1; } for(i = 1; i <= cnt; i++) for(j = max(2, L / prime[i]); j <= R / prime[i]; j++) ansprime[j * prime[i] - L] = 1; for(i = 0; i <= R - L; i++) if(!ansprime[i]) ans++; printf("%d\n", ans); return 0; }
以上是关于[luoguP1835] 素数密度_NOI导刊2011提高(04)(素数筛)的主要内容,如果未能解决你的问题,请参考以下文章
luoguP1774 最接近神的人_NOI导刊2010提高(02)x