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

线性筛

线性筛

线性筛用于在 \(O(n)\) 的时间复杂度内快速求解积性函数的前 \(n\) 项。缺点明显,空间复杂度 \(O(n)\)

常见函数的线性筛都是基于线性筛质数,以下从筛质数开始讲解。

原理

基本线性筛

从另一个熟悉的算法出发,埃氏筛法思路简单粗暴:枚举一个数的所有倍数,并将其标记为合数。

时间复杂度同样优秀,但依然会枚举很多重复元素。

相对于埃氏筛,线性筛的特点是,它确保每个合数只被它的“最小质因数”筛掉一次。

实现方法就是字面意思,枚举当前求出的所有质数,将这些质数 \(p\) 作为倍数去乘当前数 \(i\)

那如何保证“最小质因数”呢?从小到大枚举 \(p\) 的时候,如果 \(p|i\) 则直接停止即可。

积性函数筛

欧拉函数

这时考虑与线性筛相似的一个问题:如何通过 \(\varphi(i)\) 求出 \(\varphi(i\times p)\)\(p\) 为小于等于 \(i\) 的质数)。

分情况讨论:

  • \(p\mid i\)

    \(i=p^k\times m\quad(\gcd(m,p)=1)\)

    \(\varphi(i)\) 展开:

    \[\varphi(i)=\varphi(p^k\times m)=\varphi(p^k)\times \varphi(m)=p^{k-1}(p-1)\times\varphi(m)\tag1 \]

    \(\varphi(i\times p)\) 展开:

    \[\varphi(i\times p)=\varphi(p^{k+1}\times m)=\varphi(p^{k+1})\times\varphi(m)=p^k(p-1)\times\varphi(m)=p(p^{k-1}(p-1)\times\varphi(m))\tag2 \]

    \(1\) 式中的 \(p^{k-1}(p-1)\times\varphi(m)=\varphi(i)\) 代入 \(2\) 式:

    \[\varphi(i\times p)=p\times\varphi(i) \]

  • \(p\nmid i\)

    根据欧拉函数的积性

    \[\varphi(i\times p)=\varphi(i)\times\varphi(p)=\varphi(i)\times(p-1) \]

莫比乌斯函数

依据莫比乌斯函数的定义:

\[\mu(n)=\begin{cases} 1\quad n=1\\ 0\quad \text{存在相同质因子}\\ (-1)^k\quad (k=\text{互异质因子数量}) \end{cases} \]

则分类讨论,对于当前枚举数 \(i\),枚举质因子 \(p\) 有:

  • \(i\) 为质数,\(\mu(i)=-1\)
  • \(p\mid i\) ,由于原本就含有 \(p\) 质因子,现在多乘一个,\(\mu(i\cdot p)=0\)
  • \(p\nmid i\),现在是第一个 \(p\) 质因子,所以 \(\mu(i\cdot p) = -\mu(i)\)

实现

void init() {for (int i = 1;i <= maxn;i ++) book[i] = 1;book[0] = book[1] = 0;mu[1] = phi[1] = 1ll;for (int i = 2;i <= maxn;i ++) {if (book[i] == 1) {prime[++ pcnt] = i;mu[i] = -1,phi[i] = i - 1;}for (int j = 1;j <= pcnt && i * prime[j] <= maxn;j ++) {book[i * prime[j]] = 0;if (i % prime[j] == 0) { // p 为 i的最小质因子mu[i * prime[j]] = 0;phi[i * prime[j]] = phi[i] * prime[j];break;} else {mu[i * prime[j]] = -mu[i];phi[i * prime[j]] = phi[i] * (prime[j] - 1);}}}
}

\[ \]

http://www.jsqmd.com/news/1221448/

相关文章:

  • 卡特兰数 学习笔记
  • 扬州邗江区邗上街道亨得利官方钟表服务中心电话公示(2026年7月最新) - 亨得利官方
  • 芝柏官方更换原装表带价格查询|维修地址与客服热线权威信息公告(2026年7月最新) - 亨得利官方服务中心
  • BatteryML终极指南:如何用开源平台构建企业级电池寿命预测系统
  • 福州首饰回收别盲目比价!内行教你看真实成交价 - 大牌深度测评
  • Apple Silicon Mac搭建STM32开发环境全指南
  • Flask-PyMongo常见问题解答:10个开发者常遇问题解决方案
  • 盐城企业搬迁想找专业服务?这些实用挑选方法建议你提前收好 - GrowUME
  • 企业级数据开发平台架构解析:DataSphere Studio如何重塑数据治理框架?
  • Electron与Chromium屏幕录制技术方案全解析
  • 北京婚恋纠纷代理律师事务所选型:全流程代理服务评估要点 - 品牌深度评测
  • 广州高考复读学校推荐:理性选择,为梦想再搏一回 - 资讯快报
  • 训练中文文本分类 baseline:TF-IDF + 逻辑回归
  • 2026泰安黄金回收商家推荐:2026年本地最值得信赖的回收品牌盘点 - 商业快讯早知道
  • 终极免费TV浏览器:用遥控器轻松上网的完整解决方案
  • 同样转大模型,Java背景的优势和短板分别是什么?
  • 福州钻石回收专业鉴定流程详解|无损检测、资质核验干货 - 大牌深度测评
  • SPI协议详解:从基础原理到高级应用实践
  • 2026年北京企业展厅总包公司 解决交付痛点靠谱推荐 - 资讯纵览
  • 2026天津律师事务所哪家好?实用选所指南附优质机构推荐 - 速递信息
  • Windows 11优化终极指南:5分钟彻底清理系统臃肿,让你的电脑重获新生
  • 2026年7月亲身到店体验重庆亨得利官方名表服务中心|详细地址与24小时客服热线 - 亨得利官方博客
  • 昆明车灯升级哪家真靠谱全网真实评价大汇总 - 资讯纵览
  • 如何快速掌握开源库存管理系统:从零到精通的完整教程
  • 从LangChain到Autogen再到Claude-3.5 Sonnet Agent:AI Agent演进史上的3次范式跃迁(含性能衰减曲线图谱)
  • Single主题代码高亮功能详解:Prism.js的完美集成
  • 5分钟掌握缠论分析:通达信插件让技术分析自动化
  • Fargate CLI故障排查:10个常见问题终极解决方案大全
  • 上门名牌包包回收实地测评,2026易奢福大连无隐形扣费 - 奢侈品回收实体店
  • 2026年南京靠谱代理记账机构榜单推荐 - 资讯纵览