【模板】莫比乌斯反演
一、莫比乌斯反演
我们先来看一个函数:
我们先枚举一下这个函数的各个值
于是,我们可以反过来推导出关于的关系式
我们可以得到
其中,我们可以了解到一个新的函数:莫比乌斯函数
二、莫比乌斯函数:
这是莫比乌斯函数,定义如下
-
若 ,则
-
若 ,且为互不相同的质数,则有
-
其他情况中
莫比乌斯函数中有用的性质还是挺多的,这里就只列出一个最常用的炒鸡重要的性质
这条性质可以运用到很多与有关的题目中的推导式子中,非常重要
同时,莫比乌斯函数还是一个积性函数
在这里给大家提及一下积性函数:既当时,的函数叫积性函数
积性函数的性质
- 积性函数的前缀和也是积性函数
莫比乌斯函数就是借助了它是积性函数的特点,使其可以通过线性筛得到
求莫比乌斯函数的代码
inline void init()
{
mu[1]=1;
for(int i=2;i<N;i++)
{
if(!vis[i])
{
prime[++cnt]=i;
mu[i]=-1;
}
for(int j=1;j<=cnt&&i*prime[j]<N;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
mu[i*prime[j]]=-mu[i];
}
}
}
莫比乌斯反演和函数可以运用在很多题目的公式推导上,重点还是公式的推导
三、整除分块
整除分块是在莫比乌斯反演题中重要的一环,将询问的复杂度的从优化成,可以成功解决大多数数据较大的题目,十分重要
整除分块用于求的普遍情况(并不强制如上形式)下,只要满足有规律的一段区间中的值是相同的,就可以用整除分块。我们来看看对于较简单的整除分块。
若令,则有:
时,
时,
时,
时,
时,
时,
时,
时,
时,
时,
时,
时,
时,
时,
由上可以看到,由几段区间的是相同的,我们可以通过得到区间,可以时间算出这段区间的的和,最后起到求和的作用
void solve()
{
int ans=0;
for(int l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ans+=(r-l+1)*(n/(n/l));
}
}
梅子满树,清酒伊人
分类:
数学——莫比乌斯反演
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律