【数论】莫比乌斯函数及其反演

news2024/11/23 11:56:31

文章目录

  • 一、介绍
  • 二、莫比乌斯函数的算法求解
  • 三、例题

在学习之前,先来了解一下常见定义吧(OVO):

  • 常见数论函数分为两种:
    { 完全积性函数:对于任意 p , q ∈ N ,有 f ( p ⋅ q ) = f ( p ) ⋅ f ( q ) 积性函数:对于任意 p , q ∈ N 且 g c d ( p , q ) = 1 ,有 f ( p ⋅ q ) = f ( p ) ⋅ f ( q ) 非积性函数 \begin{cases} &完全积性函数:对于任意p,q \in N,有f(p \cdot q) = f(p) \cdot f(q)\\ &积性函数:对于任意p,q \in N且gcd(p,q) = 1,有f(p \cdot q) = f(p) \cdot f(q)\\ &非积性函数 \end{cases} 完全积性函数:对于任意p,qN,有f(pq)=f(p)f(q)积性函数:对于任意p,qNgcd(p,q)=1,有f(pq)=f(p)f(q)非积性函数
    常见的完全积性函数有:单位函数 ϵ ( n ) = [ n = = 1 ] \epsilon(n) = [n == 1] ϵ(n)=[n==1],常数函数 I ( n ) = = 1 I(n) == 1 I(n)==1,恒等函数 I d ( n ) = = n Id(n) == n Id(n)==n等;
    常见的积性函数有:莫比乌斯函数 μ ( n ) \mu(n) μ(n),欧拉函数 ψ ( n ) \psi(n) ψ(n),约数和函数 σ ( n ) = ∑ d ∣ n d \sigma(n) = \sum_{d | n} d σ(n)=dnd等。

  • 狄利克雷卷积定义:若 f ( n ) , g ( n ) f(n),g(n) f(n),g(n)均为数论函数,则 h ( n ) = f ( n ) × g ( n ) = ∑ d ∣ n f ( n ) ⋅ g ( n d ) = ∑ d ∣ n f ( n d ) ⋅ g ( n ) h(n) = f(n) \times g(n) = \sum_{d|n}f(n) \cdot g(\frac{n}{d}) = \sum_{d|n}f(\frac{n}{d}) \cdot g(n) h(n)=f(n)×g(n)=dnf(n)g(dn)=dnf(dn)g(n)
    其中 × \times ×为卷积运算,不懂卷积运算的可以去search一下,这里就不详细介绍了(QAQ)。

推论:

  • ϵ = I × μ = > [ n = = 1 ] = ∑ d ∣ n μ ( d ) \epsilon = I \times \mu => [n == 1] = \sum_{d|n}\mu(d) ϵ=I×μ=>[n==1]=dnμ(d)
  • ψ = I d × μ = > ψ ( n ) = ∑ d ∣ n μ ( d ) ⋅ ⌊ n d ⌋ \psi = Id \times \mu => \psi(n) = \sum_{d|n}\mu(d) \cdot \lfloor \frac{n}{d} \rfloor ψ=Id×μ=>ψ(n)=dnμ(d)dn

一、介绍

莫比乌斯函数及其反演同样是数论中的重要内容。


定义 μ \mu μ为莫比乌斯函数,
μ ( n ) = { 1 , n = 1 0 , n 含有平方及以上因子 ( − 1 ) k , k 为 n 的质因子个数 \mu(n) = \begin{cases} &1, n = 1\\ &0, n含有平方及以上因子\\ &(-1)^k,k为n的质因子个数\\ \end{cases} μ(n)= 1,n=10,n含有平方及以上因子(1)k,kn的质因子个数
这里的质因子个数指的是只出现过一次的质因子的个数,一旦某个质因子出现2次及以上,则 μ ( n ) = 0 \mu(n) = 0 μ(n)=0


莫比乌斯函数是积性函数,因此可根据 ϵ = I × μ \epsilon = I \times \mu ϵ=I×μ推导出 [ n = = 1 ] = ∑ d ∣ n μ ( d ) [n == 1] = \sum_{d|n}\mu(d) [n==1]=dnμ(d)
这个公式很重要,务必牢记!

莫比乌斯反演:
  若 g ( n ) = ∑ d ∣ n f ( d ) g(n) = \sum_{d|n}f(d) g(n)=dnf(d),则 f ( n ) = ∑ d ∣ n g ( d ) ⋅ μ ( n d ) = ∑ d ∣ n g ( n d ⋅ μ ( d ) f(n) = \sum_{d|n}g(d) \cdot \mu(\frac{n}{d}) = \sum_{d|n}g(\frac{n}{d} \cdot \mu(d) f(n)=dng(d)μ(dn)=dng(dnμ(d),反之亦然。

二、莫比乌斯函数的算法求解

由于莫比乌斯函数的定义和性质,可利用欧拉线性筛求出 μ ( x ) \mu(x) μ(x)时间复杂度为 O ( n ) O(n) O(n)

//求n以内的莫比乌斯函数
int mu[N];
void mobius(int n)
{
	bitset<N> vis;//素数筛子
	vector<int> ps;//素数数组
	vis[0] = vis[1] = true;
	mu[1] = 1;
	for(int i = 2;i <= n;i++)
	{
		if(!vis[i])ps.push_back(i),mu[i] = -1;
		
		//枚举素数表
		for(int j = 0;j < (int)ps.size() && i * ps[j] <= n;j++)
		{
			vis[i * ps[j]] = true;//筛掉
			if(i % ps[j] == 0)
			{
				mu[i * ps[j]] = 0;
				break;  
			} 
			mu[i * ps[j]] = -mu[i];
		}
	}
}

三、例题

1、【模板】莫比乌斯反演
题目描述 给定三个整数 x , y , d , 求解: ∑ i = 1 x ∑ j = 1 y [ g c d ( i , j ) = = d ] 。其中包含 T ( 1 ≤ T ≤ 1000 )组测试样例,每组测试样例三个整数 x , y , d ( 1 ≤ ∑ x , ∑ y , d ≤ 1 0 5 )。 给定三个整数x,y,d,求解:\sum_{i=1}^{x}\sum_{j=1}^{y}[gcd(i,j) == d]。其中包含T(1 \leq T \leq 1000)组测试样例,每组测试样例三个整数x,y,d(1 \leq \sum x,\sum y,d \leq 10^5)。 给定三个整数x,y,d,求解:i=1xj=1y[gcd(i,j)==d]。其中包含T1T1000)组测试样例,每组测试样例三个整数x,y,d1x,y,d105)。

题目分析:

由题给公式可以推出 ∑ i = 1 ⌊ x d ⌋ ∑ j = 1 ⌊ y d ⌋ [ g c d ( i , j ) = = 1 ] \sum_{i=1}^{\lfloor \frac{x}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{y}{d} \rfloor}[gcd(i,j) == 1] i=1dxj=1dy[gcd(i,j)==1],由莫比乌斯反演可将公式推导为

∑ i = 1 ⌊ x d ⌋ ∑ j = 1 ⌊ y d ⌋ ∑ k ∣ g c d ( i , j ) μ ( k ) \sum_{i=1}^{\lfloor \frac{x}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{y}{d} \rfloor} \sum_{k|gcd(i,j)}\mu(k) i=1dxj=1dykgcd(i,j)μ(k)

= ∑ k = 1 m i n ( x d , y d ) μ ( k ) ∑ i = 1 ⌊ x d ⌋ [ k ∣ i ] ∑ j = 1 ⌊ y d ⌋ [ k ∣ j ] = \sum_{k=1}^{min(\frac{x}{d},\frac{y}{d})}\mu(k) \sum_{i=1}^{\lfloor \frac{x}{d} \rfloor}[k|i]\sum_{j=1}^{\lfloor \frac{y}{d} \rfloor}[k|j] =k=1min(dx,dy)μ(k)i=1dx[ki]j=1dy[kj]

= ∑ k = 1 m i n ( x d , y d ) μ ( k ) ⋅ ⌊ ⌊ x d ⌋ k ⌋ ⋅ ⌊ ⌊ y d ⌋ k ⌋ = \sum_{k=1}^{min(\frac{x}{d},\frac{y}{d})} \mu(k)\cdot \lfloor \frac{\lfloor \frac{x}{d} \rfloor}{k} \rfloor \cdot \lfloor \frac{\lfloor \frac{y}{d} \rfloor}{k} \rfloor =k=1min(dx,dy)μ(k)kdxkdy

题解

//Code Here.
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 1e5 + 9;

//求n以内的莫比乌斯函数
int mu[N];
void mobius(int n)
{
	bitset<N> vis;//素数筛子
	vector<int> ps;//素数数组
	mu[1] = 1;
	for(int i = 2;i <= n;i++)
	{
		if(!vis[i])ps.push_back(i),mu[i] = -1;
		
		//枚举素数表
		for(int j = 0;j < (int)ps.size() && i * ps[j] <= n;j++)
		{
			vis[i * ps[j]] = true;//筛掉
			if(i % ps[j] == 0)
			{
				mu[i * ps[j]] = 0;
				break;  
			} 
			mu[i * ps[j]] = -mu[i];
		}
	}
}

signed main()
{
    mobius(N - 1);//预处理,求出u(x)
    int t;cin >> t;
    while(t--)
    {
        int x,y,d;cin >> x >> y >> d;
        int res = 0;
        int n = x / d,m = y / d;
        for(int i = 1;i <= min(n,m);i++)
        {
            res += mu[i] * (n / i) * (m / i);
        }
        cout << res << '\n';
    }
}

2、公约数的和

题目描述 给定 n ,求解 ∑ i = 1 n ∑ j = i + 1 n g c d ( i , j ) ,结果对 1 0 9 + 7 取模。其中包含 T ( 1 ≤ T ≤ 1000 )组测试样例,每组测试样例一个整数 n ( 1 ≤ n ≤ 1 0 6 )。 给定n,求解\sum_{i=1}^{n} \sum_{j=i+1}^{n} gcd(i,j),结果对10^9 + 7取模。其中包含T(1 \leq T \leq 1000)组测试样例,每组测试样例一个整数n(1 \leq n \leq 10^6)。 给定n,求解i=1nj=i+1ngcd(i,j),结果对109+7取模。其中包含T1T1000)组测试样例,每组测试样例一个整数n1n106)。

题目分析:此题稍难,只给出简单公式推导(QAQ)

∑ i = 1 n ∑ j = i + 1 n g c d ( i , j ) = ∑ i = 1 n ∑ j = 1 n g c d ( i , j ) − ∑ i = 1 g c d ( i , i ) 2 \sum_{i=1}^{n} \sum_{j=i+1}^{n} gcd(i,j) = \frac{\sum_{i=1}^{n} \sum_{j=1}^{n} gcd(i,j) - \sum_{i=1}gcd(i,i)}{2} i=1nj=i+1ngcd(i,j)=2i=1nj=1ngcd(i,j)i=1gcd(i,i)

∑ i = 1 n ∑ j = 1 n g c d ( i , j ) = ∑ t = 1 n ψ ( t ) ⋅ ( ⌊ n t ⌋ ) 2 \sum_{i=1}^{n} \sum_{j=1}^{n} gcd(i,j) = \sum_{t=1}^{n}\psi(t) \cdot (\lfloor \frac{n}{t} \rfloor)^2 i=1nj=1ngcd(i,j)=t=1nψ(t)(⌊tn)2
题解

//Code Here.
#include <bits/stdc++.h>
using namespace std;
#define int long long
using ll = long long;
const int p = 1e9 + 7;

const int N = 1e6 + 9;

ll qmi(ll a,ll b)//快速幂((a^b)modc)
{
	ll res = 1;
	while(b)
	{
		if(b & 1)res = res * a % p;
		a = a * a % p;
		b >>= 1;
	}
	return res;
}
int mo(int x){return (x % p + p) % p;}

//欧拉筛求n以内的欧拉函数
ll phi_euler[N];
void _phi_euler(int n)
{
	bitset<N> vis;//素数筛子
	vector<int> ps;//素数数组
	phi_euler[1] = 1;
	for(int i = 2;i <= n;i++)
	{
		if(!vis[i])ps.push_back(i),phi_euler[i] = i - 1;
		
		//枚举素数表
		for(int j = 0;j < (int)ps.size() && i * ps[j] <= n;j++)
		{
			vis[i * ps[j]] = true;//筛掉
			if(i % ps[j] == 0)
			{
				phi_euler[i * ps[j]] = phi_euler[i] * ps[j];
				break;  
			} 
			phi_euler[i * ps[j]] = phi_euler[i] * phi_euler[ps[j]];
		}
	}
    for(int i = 1;i <= n;i++)phi_euler[i] = mo(phi_euler[i] + phi_euler[i - 1]);
}

signed main()
{
    _phi_euler(N - 1);
    int inv2 = qmi(2,p - 2);
    int t;cin >> t;
    while(t--)
    {
        int n;cin >> n;
        int res = 0;
        for(int l = 1,r = 1;l <= n;l = r + 1)
        {
            r = min(n,n / (n / l));
            res = mo(res + mo(phi_euler[r] - phi_euler[l - 1]) * mo(n / l) % p * mo(n / l) % p);
        }
        int resn = mo(n * (n + 1) % p * inv2);
        cout << mo(mo(res - resn) * inv2) << '\n';
    }
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2245980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码

前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始&#xff0c;filter 被弃用&#xff0c;导致无法进行调节过滤。 TermInSetQuery 指定…

tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这次主要是学习数据增强, 训练集 验证集 测试集的构建等等的基本方法, 数据集还是用的上一篇的猫狗识别;基础篇还剩下几个, 后面的难度会逐步提升;欢迎…

ssm面向品牌会员的在线商城小程序

摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;网络化和电子化。它将是直接管理面向品牌会员的在线商城小程序的最新形式。本小程序是以面向品牌会员的在线商城管理为目标&#xff0c;使用 java技术制…

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议&#xff0c;概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…

五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则

一、引言 选择合适的架构模式是一个至关重要的决策&#xff0c;尤其是在单体架构和微服务架构之间的选择&#xff0c;本文将带大家认识什么是单体架构&#xff0c;什么是微服务架构&#xff0c;以及两者如何去选择&#xff0c;如何去转换。 二、什么是单体架构 单体架构&a…

【网络协议】【TCP】精讲TCP数据包传递的地址解析(含三次握手四次挥手图文并茂精华版)

目录 前言 1.TCP定义 1.1 什么是面向连接? 1.2 什么是可靠的通信协议? 1.3 什么是面向字节流的? 2. 数据包传递的地址解析 3. 三次握手过程详解 3.1 第一次握手 3.2 第二次握手 3.3 第三次握手 4. 四次挥手 4.1 第一次挥手 4.2 第二次挥手 4.3 第三次挥手 4.…

Win11 24H2新BUG或影响30%CPU性能,修复方法在这里

原文转载修改自&#xff08;更多互联网新闻/搞机小知识&#xff09;&#xff1a; 一招提升Win11 24H2 CPU 30%性能&#xff0c;小BUG大影响 就在刚刚&#xff0c;小江在网上冲浪的时候突然发现了这么一则帖子&#xff0c;标题如下&#xff1a;基准测试&#xff08;特别是 Time…

人工智能的核心思想-神经网络

神经网络原理 引言 在理解ChatGPT之前&#xff0c;我们需要从神经网络开始&#xff0c;了解最简单的“鹦鹉学舌”是如何实现的。神经网络是人工智能领域的基础&#xff0c;它模仿了人脑神经元的结构和功能&#xff0c;通过学习和训练来解决复杂的任务。本文将详细介绍神经网络…

socket连接封装

效果&#xff1a; class websocketMessage {constructor(params) {this.params params; // 传入的参数this.socket null;this.lockReconnect false; // 重连的锁this.socketTimer null; // 心跳this.lockTimer null; // 重连this.timeout 3000; // 发送消息this.callbac…

蓝桥杯每日真题 - 第17天

题目&#xff1a;&#xff08;最大数字&#xff09; 题目描述&#xff08;13届 C&C B组D题&#xff09; 题目分析&#xff1a; 操作规则&#xff1a; 1号操作&#xff1a;将数字加1&#xff08;如果该数字为9&#xff0c;变为0&#xff09;。 2号操作&#xff1a;将数字…

探索免费的Figma中文版:开启高效设计之旅

在当今数字化设计的浪潮中&#xff0c;Figma以其强大的云端协作功能和出色的设计能力&#xff0c;成为了众多设计师的心头好。而对于国内的设计师来说&#xff0c;能够免费使用Figma中文版更是一大福音&#xff0c;下面就来一起探索一下吧。 一、Figma中文版的获取途径 虽然F…

leetcode:112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是指没有子节点…

新160个crackme - 100-E-crackme

运行分析 需根据机器码&#xff0c;填写正确注册码 PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida无法搜到字符串&#xff0c;使用暂停法找关键函数 首先启动ida动态调试&#xff0c;点击注册来到错误弹窗 点击Debugger -> Pause process 发现断…

VSCode 间距太小

setting->font family 使用&#xff1a;Consolas, Courier New, monospace 字体

七、电机三环控制

电机三环控制指的是&#xff0c;直流有刷电机三环&#xff08;电流环速度环位置环&#xff09;PID 控制。 1、三环PID控制原理 三环 PID 控制就是将三个 PID 控制系统&#xff08;例如&#xff1a;电流环、速度环以及位置环&#xff09;串联起来&#xff0c;然后对前一个系统…

【快讯】亚马逊(AMZN.US)关联方拟出售7.08万股股份,价值约1,407.69万美元

根据美国证券交易委员会&#xff08;SEC&#xff09;美东时间11月21日披露的文件&#xff0c;亚马逊(AMZN.US)关联方BEZOS EARTH FUND FOUNDATION拟于11月21日出售7.08万股普通股股份&#xff0c;总市值约1,407.69万美元。此外&#xff0c;BEZOS EARTH FUND FOUNDATION自2024年…

影响电阻可靠性的因素

一、影响电阻可靠性的因素&#xff1a; 影响电阻可靠性的因素有温度系数、额定功率&#xff0c;最大工作电压、固有噪声和电压系数 &#xff08;一&#xff09;温度系数 电阻的温度系数表示当温度改变1摄氏度时&#xff0c;电阻阻值的相对变化&#xff0c;单位为ppm/C.电阻温度…

51c大模型~合集76

我自己的原文哦~ https://blog.51cto.com/whaosoft/12617524 #诺奖得主哈萨比斯新作登Nature&#xff0c;AlphaQubit解码出更可靠量子计算机 谷歌「Alpha」家族又壮大了&#xff0c;这次瞄准了量子计算领域。 今天凌晨&#xff0c;新晋诺贝尔化学奖得主、DeepMind 创始人哈萨…

深入了解 Linux htop 命令:功能、用法与示例

文章目录 深入了解 Linux htop 命令&#xff1a;功能、用法与示例什么是 htop&#xff1f;htop 的安装htop的基本功能A区&#xff1a;系统资源使用情况B区&#xff1a;系统概览信息C区&#xff1a;进程列表D区&#xff1a;功能键快捷方式 与 top 的对比常见用法与示例实际场景应…

XML文件(超详细):XML文件概念、作用、写法、如何用程序解析XML、写入XML、dom4j框架、DTD文档、schema文档

目录 1、什么是XML文件&#xff1f;和properties属性文件有什么区别&#xff1f;和txt文本文件有什么区别&#xff1f; 2、XML文件的用途 3、XML的格式 4、如何解析XML文件 5、如何写入XML文件 6、约束XML的书写格式 6.1 DTD文档-约束书写格式&#xff0c;但是不能约束具…