文章
7
粉丝
204
获赞
4
访问
67.9k
### 埃式筛法
给定一个正整数n(n <= 1e6),请问n以内有多少个素数?
做法其实很简单,首先将2到n范围内的所有整数写在一张一维表里,其中2是最小的素数。将表中所有2的倍数划去,此时表中剩下的最小的数字是3,3无法被更小的数整除,所以3是素数。再将表中所有3的倍数划去......以此类推,如果表中剩余的最小数是m,则m就是素数,将表中所有m的倍数划去,这样反复操作,就能依次枚举n以内的素数,时间复杂度为$O(nloglogn)$
```c
int prime[MAXN];
bool is_prime[MAXN];
//返回n以内的素数个数
int sieve(int n) {
int p = 0;
for (int i = 2; i <= n; ++i)
is_prime[i] = true;
for (int i = 2; i <= n; ++i) {
if (is_prime[i]) {
prime[p++] = i;
for (int j = 2 * i; j <= n; j += i)
is_prime[j] = false;
}
}
return p;
}
```
### 区间筛法
给定整数a和b,请问区间$[a,b)$内有多少个素数...
登录后发布评论
可用孪生素数增加步长