今日内容–数论
素数筛:
1、埃氏筛(时间复杂度O(nloglogn)):
const int maxn = 100;
bool number[maxn + 5];
void isprime() {
int i, j;
memset(number, true, sizeof(number));
for (i = 2; i <= maxn; i++) {
if (number[i] == true) {
for (j = 2; j * i <= maxn; j++)
number[i * j] = false;
}
}
}
2、欧拉筛(时间复杂度O(n)):
bool number[maxn + 5];//记录下标是不是素数
void isprime() {
int prime[maxn + 5];//记录素数
int i, j, c = 0;
memset(number, true, sizeof(number));
for (i = 2; i <= maxn; i++) {
if (number[i])
prime[c++] = i;
for (j = 0; j < c && prime[j] * i <= maxn; j++) {
/*超出pri数组的范围/超出数据范围,1条件不必有*/
number[prime[j] * i] = false;
if (i % prime[j] == 0) //见题解
break;
}
}
}