今天我刷题了吗
  • 2U's GitBook
  • 我的模板
    • I/O 及其他
      • 快速读写
      • 关闭同步流
      • 文件重定向
      • 随机数
      • 运行时间
      • Lambda
      • 万能头文件
    • 字符串
      • 字符串分割
      • KMP 算法
      • Manacher 算法
      • AC 自动机
      • 高精度
    • 数学
      • 快速幂
      • 矩阵快速幂
      • 筛法
      • 欧拉函数
      • Polya 定理
      • 逆元
      • 组合数
    • 图论
      • Dijkstra 算法
      • SPFA 算法
      • Kruskal 算法
      • Prim 算法
      • 倍增
      • 离线 Tarjan 算法
      • Tarjan 算法
      • Hungary 算法
      • A* 算法
      • EK 算法
      • Dinic 算法
    • 数据结构
      • 线段树
      • 树状数组
      • 可持久化数组
      • 主席树
      • 树堆
      • 无旋树堆
      • 伸展树
      • 树套树
      • 树链剖分
      • 点分治
      • 动态树
  • 我的题单
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 我的模板
  2. 数学

筛法

欧拉筛法

void euler(int n, vector<int>& primes)
{
    primes.clear();
    vector<bool> isPrime(n + 1, true);
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i <= n; i++) {
        if (isPrime[i]) {
            primes.push_back(i);
        }
        for (int p : primes) {
            if (1ll * i * p > n) break;
            isPrime[i * p] = false;
            if (i % p == 0) break;
        }
    }
}

埃拉托斯特尼筛法

void eratosthenes(int n, vector<int>& primes)
{
    primes.clear();
    vector<bool> isPrime(n + 1, true);
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i <= n; i++) {
        if (!isPrime[i]) continue;
        primes.push_back(i);
        if (ll(i) * i > n) continue;
        for (int j = i * i; j <= n; j += i) {
            isPrime[j] = false;
        }
    }
}
上一页矩阵快速幂下一页欧拉函数

最后更新于4年前

这有帮助吗?