当前位置: 首页 > news >正文

线性筛和欧拉函数

1. 定义与用途

概念定义用途
线性筛一种时间复杂度为 O(n) 的算法,用于高效筛选出所有小于等于 n 的素数。生成素数表、辅助计算数论函数(如欧拉函数、莫比乌斯函数)。
欧拉函数 ϕ(n)ϕ(n)表示小于 n 且与 n 互素的正整数的个数。解决同余问题、RSA加密算法、组合数学问题(如欧拉定理)。

2. 核心区别

维度线性筛欧拉函数
性质一种算法(工具)一种数论函数(数学对象)
功能筛选素数,或辅助计算数论函数的值。计算与 n 互质的数的个数。
时间复杂度O(n)计算单个 ϕ(n) 的时间复杂度为 O(n​),但结合线性筛可优化为 O(n)。
输入输出输入一个整数 n,输出所有素数或预处理数论函数的值。输入一个整数 n,输出与 n 互质的数的个数。

3. 联系

虽然线性筛和欧拉函数是独立的概念,但线性筛可以高效计算欧拉函数的值。
例如:使用线性筛法预处理欧拉函数 ϕ(n) 的步骤:

  1. 初始化:对每个数 i,标记 ϕ(i)=i。

  2. 筛法过程

    • 当筛到素数 p 时,对所有 p 的倍数 i:

      • 如果 i 是素数 p 的首次倍数,则 ϕ(i)=ϕ(i/p)⋅p。

      • 如果 i 是素数 p 的非首次倍数,则 ϕ(i)=ϕ(i)⋅p。

4.代码示例

(1) 线性筛法筛选素数
vector<int> linear_sieve(int n) {
    vector<int> primes;
    vector<bool> is_prime(n + 1, true);
    for (int i = 2; i <= n; ++i) {
        if (is_prime[i]) primes.push_back(i);
        for (int p : primes) {
            if (i * p > n) break;
            is_prime[i * p] = false;
            if (i % p == 0) break; // 关键:确保每个数只被最小素因子筛一次
        }
    }
    return primes;
}
(2) 线性筛法计算欧拉函数
vector<int> euler_phi_linear(int n) {
    vector<int> phi(n + 1), primes;
    phi[1] = 1;
    for (int i = 2; i <= n; ++i) {
        if (phi[i] == 0) { // i 是素数
            primes.push_back(i);
            phi[i] = i - 1; // 素数的欧拉函数值为 i-1
        }
        for (int p : primes) {
            if (i * p > n) break;
            if (i % p == 0) {
                phi[i * p] = phi[i] * p; // p 是 i 的最小素因子
                break;
            } else {
                phi[i * p] = phi[i] * (p - 1); // p 与 i 互质
            }
        }
    }
    return phi;
}

5. 总结

线性筛欧拉函数
是工具(算法),用于生成素数或辅助计算数论函数。是数学对象,表示与 n 互质的数的个数。
时间复杂度为 O(n),高效但需要预处理。单独计算时间复杂度较高,但结合线性筛可优化。
核心是筛法的实现逻辑(如标记合数)。核心是数论性质(如互质条件)。

关键点
线性筛是算法,欧拉函数是函数。线性筛可以用于高效计算欧拉函数,但两者本质不同。

相关文章:

  • mysql实例2
  • AF3 rot_to_quat函数解读
  • 群体智能优化算法-蚁狮优化算法(Ant Lion Optimizer, ALO,含Matlab源代码)
  • 【愚公系列】《高效使用DeepSeek》024-儿童教育
  • 2025:sql注入详细介绍
  • 并发和并行、同步和异步、进程和线程的关系
  • 【MySQL篇】索引特性
  • pcap流量包分析
  • Linux 内核源码阅读——ipv4
  • 合成层优化
  • 【Attention】SKAttention
  • 优先队列-小根堆留坑
  • 使用 Node.js 读取 Excel 文件并处理合并单元格
  • Spring:AOP
  • 网络HTTPS协议
  • SOFABoot-08-启动加速
  • 修改服务器windows远程桌面默认端口号
  • 苹果iPhone屏幕防护专利获批,未来iPhone或更耐用
  • Linux 通过压缩包安装 MySQL 并设置远程连接教程
  • Nginx及前端部署全流程:初始化配置到生产环境部署(附Nginx常用命令)
  • 中消协点名新能源汽车行业:定金退款争议频发
  • A股低开高走全线上涨:军工股再度领涨,两市成交12934亿元
  • 住宿行业迎“最火五一”:数千家酒店连续3天满房,民宿预订量创历史新高
  • 山东滕州市醉驾交通事故肇事人员已被刑拘
  • 马上评|从一个细节看今年五一档电影
  • 《中国医药指南》就“宫颈癌等论文出现男性病例”致歉:辞退涉事编辑