【数学】各种积性函数的线性筛法
【数学】各种积性函数的线性筛法
前置芝士:几种特殊的积性函数的定义及基本性质。
定义
积性函数:若函数
完全积性函数:若函数满足
判定
特殊例子:(以下都是积性函数)
对于函数之间运算产生的函数,有以下规律:
若
有时在题目中,会要求筛出
我们发现一个普遍的性质,这些函数当自变量取值为质数时,都可以简单地
不会线性筛质数的自行前往:P3383 【模板】线性筛素数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
具体对于每一个函数将怎么做呢?
欧拉函数
直接枚举比
因为无论一个质数
以及(
因为
由于线性筛一定会把每个数筛一次,所以保证范围内的数全都计算了
(代码中的
Code
inline void init()
{
phi[1] = 1;
for(R int i = 2;i <= N - 1;i++)
{
if(!vis[i])
{
phi[i] = i - 1;
prime[++tot] = i;
}
for(R int j = 1;j <= tot && i * prime[j] < N;j++)
{
vis[prime[j] * i] = 1;
if(!(i % prime[j]))
{
phi[prime[j] * i] = (prime[j] - 1) * phi[i];
break;
}
phi[prime[j] * i] = phi[i] * prime[j];
}
}
}
莫比乌斯函数
同
即
考虑到线性筛中一个任意数和一个质数相乘的情况,如果
Code
inline void init()
{
miu[1] = 1;
for(R int i = 2;i <= N - 1;i++)
{
if(!vis[i])
{
miu[i] = -1;
prime[++tot] = i;
}
for(R int j = 1;j <= tot && i * prime[j] < N;j++)
{
vis[prime[j] * i] = 1;
if(!(i % prime[j]))
{
miu[prime[j] * i] = 0;
break;
}
miu[prime[j] * i] = -miu[i];
}
}
}
因数和
精彩的部分来了,本人第一次看到时也十分震撼。
方法源自ldysy2102 - 博客园的博客线性筛约数个数、约数和的新方法 - ldysy2102 - 博客园 (cnblogs.com)
首先当
由唯一分解定理,一个数可以被分解为:
这个数的因数就是这些质因数任意次数的任意组合,每个质因数都可以选择
每个因数就是质因数的任意次方乘起来,是:
令
两个柿子只有
这样,在知道
由于这些函数都是积性函数,所以当
Code
inline void init()
{
sig[1] = 1;
for(int i = 2;i < N;i++)
{
if(!vis[i])
{
prime[++tot] = i;
sig[i] = i + 1;
}
for(int j = 1;j <= tot && i * prime[j] < N;j+)
{
vis[i * prime[j]] = 1;
if(!(i % prime[j]))
{
sig[i * prime[j]] = ((prime[j] + 1) * sig[i] % MOD - prime[j] * sig[i / prime[j]] % MOD + MOD) % MOD;
break;
}
sig[i * prime[j]] = sig[i] * (prime[j] + 1);
}
}
因数个数d
同理,首先发现当
对于
所以
所以最终得到:
Code
inline void init()
{
d[1] = 1;
for(int i = 2;i < N;i++)
{
if(!vis[i])
{
prime[++tot] = i;
d[i] = 2;
}
for(int j = 1;j <= tot && i * prime[j] < N;j++)
{
vis[i * prime[j]] = 1;
if(!(i % prime[j]))
{
d[i * prime[j]] = 2 * d[i] - d[i / prime[j]];
break;
}
d[i * prime[j]] = d[i] * 2;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!