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

线性筛筛一般积性函数

线性筛筛一般积性函数

前置芝士

  • 线性筛、积性函数

有用的结论

  • \(f(x)\)\(g(x)\) 都是积性函数,则 \(h(x)=f(x)g(x)\) 也是积性函数
  • \(f(x)\)\(g(x)\) 都是积性函数,则 \(h(x \cdot y)=\sum\limits_{x\cdot y=n}f(x)g(y)\) 也是积性函数

How to do

给定一个积性函数 \(f(x)\)
要求能快速计算 \(f(p)\)\(f(p^{k})\) 其中 \(p\) 为质数
对于每个数 \(x\),记录它最小的质因子的幂 记为 \(low[n]\) 比如 \(low[60]=2^{2}=4\)
\(x\) 的最小质因子 \(p\) 指数为一,那么直接套用公式 \(f(x\cdot y)=f(x) \cdot f(y)\)
否则分两类讨论:
\(x=p^{k}\) 根据 \(f(p^{k-1})\)计算 \(f(p^k)\)
否则把 \(x\) 分解成 \(\frac{x}{low[x]}\)\(low[x]\) 再使用上面公式计算

example1:

  • \(f(n)=\sum\limits_{d|n} d \cdot \varphi(d)\)
f[1] = 1;
for (int i = 2; i <= n; i++)
{if (low[i] == 0){low[i] = i, prime.emplace_back(i);f[i] = 1ll * (i - 1) * i + 1ll;}for (auto j : prime){if (i * j > n)break;if (i % j == 0){low[i * j] = low[i] * j;if (low[i] == i){f[i * j] = f[i] + 1ll * (i * j - i) * (i * j);}else{f[i * j] = f[i / low[i]] * f[low[i] * j];}break;}low[i * j] = j;f[i * j] = f[i] * f[j];}
}

lazytag

http://www.vanclimg.com/news/489.html

相关文章:

  • 昨日总结
  • 差分探头都能测那些信号呢?
  • VisualCppRedist 运行库合集 v84
  • word自定义标序号
  • 完整深度学习环境安装指南 (PyTorch 2.7.1 + CUDA 12.8)
  • genieacs脚本配置
  • Nodej - *--_
  • 基于 PKDV508E 高压差分探头的电机反电动势测试方案
  • 数字孪生:驱动工厂智能化转型的核心技术
  • 公告
  • USB转串口硬件电路CH340
  • 完全开启PC端虚拟化(docker无法成功运行的)
  • 【SAE独立出版、EI检索】2025年飞行器控制与导航技术国际学术会议(ACNT 2025)
  • 2025年7月28日测试
  • 文字转语音软件 VPot v2411
  • 【LeetCode 234】算法:回文链表
  • 开发转产品的第88天 07-28
  • 高效查日志进阶指南:掌握grep命令的完整技巧
  • CF2097F Lost Luggage 题解
  • 删除某网盘附带的“智能看图”
  • pgcenter
  • AdventureX 2025赛后感想
  • Vue2.0 兼容IE哪个版本以上吗?
  • 优雅的中间件架构实现:Rust高性能Web框架解析
  • flutter上手 - ---空白--
  • WinNTSetup 系统安装利器 v5.4.0 单文件版
  • Docker-避坑:Mysql配置
  • workbench mechanical中的接触
  • Photo Stamp Remover – 去除图片特征[Windows]
  • opencv安装验证的一个案例