前置知识

数论函数及相关基本定义

素数的线性筛

线性筛

线性筛可以在严格$O(n)$的时间内筛出积性函数的值,

它有常见的套路

假设$n = p_1^{a_1} p_2^{a_2} \dots p_k^{a_k}$

如果我们能快速得出$f(p_i)$和$f(p_i^{k+1})$的取值,那么直接套板子就行了

在下文中如无特殊说明,默认$p_i$表示$n$质因数分解之后第$i$个质数,$a_i$表示$p_i$的指数

常见的有以下几种

线性筛素数

比较简单,这也是筛其他积性函数的基础

#include<cstdio>
const int MAXN = 1e4 + 10;
int N, prime[MAXN], vis[MAXN], tot;
void GetPrime(int N) {
    vis[1] = 1;
    for(int i = 2; i <= N; i++) {
        if(!vis[i]) prime[++tot] = i;
        for(int j = 1; j <= tot && i * prime[j] <= N; j++) {
            vis[i * prime[j]] = 1;
            if(!(i % prime[j])) break;
        }
    }
}
int main() {
    GetPrime(1e3);
    for(int i = 1; i <= tot; i++)
        printf("%d ", prime[i]);
    return 0;
}
线性筛素数

相关文章:

  • 2021-11-19
  • 2021-11-13
  • 2021-06-22
  • 2021-06-11
  • 2022-12-23
  • 2022-12-23
  • 2021-08-25
  • 2021-11-13
猜你喜欢
  • 2022-12-23
  • 2022-02-24
  • 2021-06-29
  • 2022-12-23
  • 2021-11-13
  • 2022-12-23
  • 2022-02-03
相关资源
相似解决方案