P3327 [SDOI2015]约数个数和

【题解&总结】 P3327 [SDOI2015]约数个数和 题目大意 设 d(x)d(x)d(x) 表示 xxx 因数个数,给定 n,mn,mn,m ,求 ∑i=1n∑j=1md(ij)\sum_{i=1}^n\sum_{j=1}^md(ij)i=1∑n​j=1∑m​d(ij) 题解 首先有一个奇妙的结论: d(ij)=∑x∣i∑y∣i[gcd(x,y)==1]d(ij)=\sum_{x|i}\sum_{y|i}[gcd(x,y)==1]d(ij)=x∣i∑​y∣i∑​[gcd(x,y)==1] 证明如下: 根据定义,d(ij)=∑p∣ij1d(ij)=\sum_{ 阅读详情

Label

莫比乌斯反演

Description

设d(x)d(x)d(x)为xxx的约数个数,给定TTT组n,m(1≤T,n,m≤5×104)n,m(1\le T,n,m\le 5\times 10^4)n,m(1≤T,n,m≤5×104),对于每组n,mn,mn,m,求

​ ∑i=1n∑j=1md(ij)\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)i=1∑n​j=1∑m​d(ij)

Solution

为了将ddd变化为可利用反演结论化简的式子,我们首先引入一个结论:

​ d(ij)=∑x∣i∑y∣j[gcd(i,j)=1]d(ij)=\sum_{x|i}\sum_{y|j}[gcd(i,j)=1]d(ij)=x∣i∑​y∣j∑​[gcd(i,j)=1] (1)(1)(1)

该结论中出现了[gcd(i,j)=1][gcd(i,j)=1][gcd(i,j)=1]的形式,我们考虑进一步变换:

d(ij)=∑x∣i∑y∣j[gcd(i,j)=1]d(ij)=\sum_{x|i}\sum_{y|j}[gcd(i,j)=1]d(ij)=x∣i∑​y∣j∑​[gcd(i,j)=1]

=∑x∣i∑y∣j∑p∣gcd(x,y)μ(p)=\sum_{x|i}\sum_{y|j}\sum_{p|gcd(x,y)}\mu(p)=x∣i∑​y∣j∑​p∣gcd(x,y)∑​μ(p)

=∑p∣i∧p∣jμ(p)∑x∣i∑y∣j[p∣gcd(x,y)]=\sum_{p|i\wedge p|j}\mu(p)\sum_{x|i}\sum_{y|j}[p|gcd(x,y)]=p∣i∧p∣j∑​μ(p)x∣i∑​y∣j∑​[p∣gcd(x,y)]

=∑p∣i∧p∣jμ(p)∑xp∣ip∑yp∣jp[1∣gcd(xp,yp)]=\sum_{p|i\wedge p|j}\mu(p)\sum_{\frac{x}{p}|\frac{i}{p}}\sum_{\frac{y}{p}|\frac{j}{p}}[1|gcd(\frac{x}{p},\frac{y}{p})]=p∣i∧p∣j∑​μ(p)px​∣pi​∑​py​∣pj​∑​[1∣gcd(px​,py​)] (2)(2)(2)

=∑p∣i∧p∣jμ(p)∑xp∣ip∑yp∣jp1=\sum_{p|i\wedge p|j}\mu(p)\sum_{\frac{x}{p}|\frac{i}{p}}\sum_{\frac{y}{p}|\frac{j}{p}}1=p∣i∧p∣j∑​μ(p)px​∣pi​∑​py​∣pj​∑​1

=∑p∣i∧p∣jμ(p)∑x∣ip1∑y∣jp1=\sum_{p|i\wedge p|j}\mu(p)\sum_{x|\frac{i}{p}}1\sum_{y|\frac{j}{p}}1=p∣i∧p∣j∑​μ(p)x∣pi​∑​1y∣pj​∑​1

=∑p∣i∧p∣jμ(p)d(ip)d(jp)=\sum_{p|i\wedge p|j}\mu(p)d(\frac{i}{p})d(\frac{j}{p})=p∣i∧p∣j∑​μ(p)d(pi​)d(pj​)

∴∑i=1n∑j=1md(ij)\therefore \sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)∴i=1∑n​j=1∑m​d(ij)

=∑i=1n∑j=1m∑x∣i∑y∣j[gcd(i,j)=1]=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{x|i}\sum_{y|j}[gcd(i,j)=1]=i=1∑n​j=1∑m​x∣i∑​y∣j∑​[gcd(i,j)=1]

=∑i=1n∑j=1m=∑p∣i∧p∣jμ(p)d(ip)d(jp)=\sum_{i=1}^{n}\sum_{j=1}^{m}=\sum_{p|i\wedge p|j}\mu(p)d(\frac{i}{p})d(\frac{j}{p})=i=1∑n​j=1∑m​=p∣i∧p∣j∑​μ(p)d(pi​)d(pj​)

=∑p=1min(n,m)μ(p)∑i=1n∑j=1m[p∣gcd(i,j)]d(ip)d(jp)=\sum_{p=1}^{min(n,m)}\mu(p)\sum_{i=1}^{n}\sum_{j=1}^{m}[p|gcd(i,j)]d(\frac{i}{p})d(\frac{j}{p})=p=1∑min(n,m)​μ(p)i=1∑n​j=1∑m​[p∣gcd(i,j)]d(pi​)d(pj​) (3)(3)(3)

=∑p=1min(n,m)μ(p)∑i=1n∑j=1m[1∣gcd(ip,jp)]d(ip)d(jp)=\sum_{p=1}^{min(n,m)}\mu(p)\sum_{i=1}^{n}\sum_{j=1}^{m}[1|gcd(\frac{i}{p},\frac{j}{p})]d(\frac{i}{p})d(\frac{j}{p})=p=1∑min(n,m)​μ(p)i=1∑n​j=1∑m​[1∣gcd(pi​,pj​)]d(pi​)d(pj​)

=∑p=1min(n,m)μ(p)∑i=1⌊np⌋∑j=1⌊mp⌋d(i)d(j)=\sum_{p=1}^{min(n,m)}\mu(p)\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}d(i)d(j)=p=1∑min(n,m)​μ(p)i=1∑⌊pn​⌋​j=1∑⌊pm​⌋​d(i)d(j)

=∑p=1min(n,m)μ(p)S(⌊np⌋)S(⌊mp⌋)=\sum_{p=1}^{min(n,m)}\mu(p)S(\lfloor\frac{n}{p}\rfloor)S(\lfloor\frac{m}{p}\rfloor)=p=1∑min(n,m)​μ(p)S(⌊pn​⌋)S(⌊pm​⌋)

(其中S(x)=∑k=1x(d(k))S(x)=\sum_{k=1}^{x}(d(k))S(x)=∑k=1x​(d(k)))

算法时间复杂度O(n+Tn)O(n+T\sqrt n)O(n+Tn​)

总结

注释:

(1)积累结论:d(ij)=∑x∣i∑y∣j[gcd(i,j)=1]d(ij)=\sum_{x|i}\sum_{y|j}[gcd(i,j)=1]d(ij)=∑x∣i​∑y∣j​[gcd(i,j)=1]。

(2)与将gcd(x,y)=dgcd(x,y)=dgcd(x,y)=d转化为gcd(xd,yd)gcd(\frac{x}{d},\frac{y}{d})gcd(dx​,dy​)的套路类似,遇到形似[x∣y][x|y][x∣y]时,可考虑将其转化为[1∣yx][1|\frac{y}{x}][1∣xy​],当xxx整除yyy时此真值式恒为1。

(3)求和符号交换时,需考虑合适的将被交换的求和符号对应的范围转化的方式:有时考虑所有合法值的取值范围,有时转化为真值式[...][...][...]表示更加简洁。

Code

#include<cstdio>
#include<iostream>
#define ri register int
#define ll long long
using namespace std;

const int MAXN=5e4;
int T,N,M,n,cnt;
ll ans,mu[MAXN+20],prime[MAXN+20],sum[MAXN+20],d[MAXN+20];
bool notprime[MAXN+20];

void Mobius() 
{
	mu[1]=1,notprime[1]=true;
	for(ri i=2;i<=MAXN;++i)
	{
		if(!notprime[i]) prime[++cnt]=i,mu[i]=-1;
		for(ri j=1;j<=cnt&&i*prime[j]<=MAXN;++j)
		{
			notprime[i*prime[j]]=true;
			if(i%prime[j]==0) break;
			else mu[i*prime[j]]=-mu[i];
		}
	}
	for(ri i=1;i<=MAXN;++i) sum[i]=sum[i-1]+mu[i];
}

void GetD()
{
	for(ri i=1;i<=MAXN;++i)
		for(ri j=i;j<=MAXN;j+=i) ++d[j];
	for(ri i=1;i<=MAXN;++i) d[i]=d[i-1]+d[i];
}

int main()
{
	std::ios::sync_with_stdio(false);
	cin>>T;
	Mobius(); GetD();
	for(ri op=1;op<=T;++op)
	{
		cin>>N>>M;
		n=min(N,M),ans=0LL;
		for(ri l=1,r;l<=n;l=r+1)
		{
			r=min(N/(N/l),M/(M/l));
			ans+=(sum[r]-sum[l-1])*d[N/l]*d[M/l];
		}
		cout<<ans<<'\n';
	}
	return 0;
}
基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题 阅读详情

相关推荐

LC与RC滤波电路实战对比:从原理到选型指南

本文深入对比了LC与RC滤波电路的核心原理与实战应用。LC滤波利用电感与电容的无损能量搬运,适合高频、大电流电源滤波,效率高但需注意谐振风险;RC滤波通过电阻消耗能量实现滤波,结构简单、成本低,适用于低频信号处理或小电流供电场景。文章提供了从工作原理、性能维度到具体选型的完整指南,帮助工程师根据项目需求(如频率范围、负载电流、效率)做出精准选择。

weixin_29240711的博客 499

luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)

luogu P3327 [SDOI2015]约数个数和(rng58-clj等式) 题目大意 设d(x)d(x)d(x)为x的因子的个数,给出N和M求 ∑i=1n∑j=1md(i,j) \sum_{i=1}^n\sum_{j=1}^md(i,j) i=1∑n​j=1∑m​d(i,j) 解题思路 根据rng58-clj等式,有 ∑i=1n∑j=1md(i,j)=∑i=1n∑j=1m[gcd(i,j)=...

FLY_WHITE的博客 398

保姆级教程:在Zynq UltraScale+ EV系列FPGA上,用VCU IP核搞定4K60帧H265视频解码与HDMI2.0输出

本文提供在Zynq UltraScale+ EV系列FPGA上使用VCU IP核实现4K60帧H265视频解码与HDMI2.0输出的全流程指南。从开发环境准备、Vivado工程配置到PetaLinux系统定制,详细解析硬件选型、IP核参数设置及性能优化技巧,帮助开发者快速构建高效视频处理系统。

weixin_30800987的博客 432

P3327 [SDOI2015]约数个数和 题解

博客园同步 原题链接 简要题意: 求 ∑i=1n∑j=1md(ij)\sum_{i=1}^n \sum_{j=1}^m d(ij)i=1∑n​j=1∑m​d(ij) 其中,d(x)d(x)d(x) 表示 xxx 的因数个数。 算法一 爆搜。 时间复杂度:O(Tnmnm)O(Tnm \sqrt{nm})O(Tnmnm​).(TTT 的飞起) 期望得分:0pt0pt0pt. 算法二 考虑每个数作为其它...

bifanwen的博客 981

【YOLOv8改进[Conv]】使用OREPA助力V8更优秀

使用OREPA助力V8更优秀,降低训练成本,在不引入任何推理时间成本的情况下提高深度模型的性能。

静谧、淡雅 1917

【嵌入式 – GD32开发实战指南(ARM版本)】第1部分 基础篇 - 第1章 开发环境搭建

开发环境: MDK:Keil 5.30 MCU:GD32F207IK 1.1 GD32F207I-EVAL开发板简介 笔者使用的开发板是兆易创新设计的GD32F207I-EVAL开发板。 GD32F207I-EVAL开发板使用 GD32F207IK作为主控制器,主频120MHz、集成3MB Flash、256KB SRAM、通用定时器*10、Adv. TM*2、Basic TM*2、系统时钟*1、看门狗*2、RTC*1、USART*4、UART*4、I2C*3、SPI*3、I2S*1、SDIO*1、CAN

不问归期的博客 9986

洛谷P3327 [SDOI2015]约数个数和

如果不知道莫比乌斯 这里有我的超精简版入门Mobius 记录我初学莫比乌斯做了整整一天还迷迷糊糊 题目简述: 求∑i=1n∑​j=1m​d(ij)d(ij)为i∗j的约数∑_{i=1}^n∑_{​j=1}^m​d(ij)\\d(ij)为i*j的约数i=1∑n​​j=1∑m​​d(ij)d(ij)为i∗j的约数(多组数据) 必要性质: ​d(ij)=∑x∣i∑y∣jgcd(x,y)=1​d(ij)=...

Fooooooo的博客 266

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

洛谷P3327 - [SDOI2015]约数个数和

Portal Description 共\(T(T\leq5\times10^4)\)组数据。给出\(n,m(n,m\leq5\times10^4)\),求\[\sum_{i=1}^n\sum_{j=1}^m\sigma_0(ij)\] Solution 首先有结论:\(\sigma_0(xy)=\sum_{d_1|x}\sum_{d_2|y}[gcd(d_1,d_2)=1]\)。下面先...

TC1129的博客 161

小目标检测之改进的YOLOV11算法

MASF-YOLO通过多尺度特征聚合注意力增强自适应融合三大核心创新,显著提升了无人机视角下的小目标检测性能。

hasakie的博客 1717

Python 爬虫实战:全面解析雪球网用户投资组合数据采集

本文介绍了如何使用 Python 爬虫技术,抓取雪球网用户的投资组合信息。通过模拟登录、解析页面内容等步骤,获取了用户的持仓数据。未来,可以进一步探索以下方向:

2201_76125261的博客 1304

洛谷 P3327 [SDOI2015]约数个数和 (莫比乌斯反演)

题目描述 设d(x)d(x)d(x)为xxx的约数个数,给定NNN、MMM,求 ∑Ni=1∑Mj=1d(ij)∑i=1N∑j=1Md(ij)\sum^N_{i=1}\sum^M_{j=1}d(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据。第一行,一个整数T,表示测试数据的组数。接下来的T行,每行两个整数N、M。 输出格式: T行,每行一个整数,表示你所求的答案。 ...

Ab.Ever 2438

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

P3327 [SDOI2015]约数个数和 (mobius反演)

P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n​∑j=1m​d(ij) =∑i=1n∑j=1m∑x∣i∑y∣jgcd(x,y)==1= \sum_{i = 1} ^{n} \sum_{j = 1} ^{m} \sum_{x \mid i} \sum_{y \mid j} gcd(x, y) == 1=i=1∑n​j=1∑m​x∣i∑​y∣j∑​gcd(x,y)==1 改成枚举x

lifehappy 292

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷 P3327 [SDOI2015]约数个数和 莫比乌斯反演

P3327 [SDOI2015]约数个数和 学习莫比乌斯反演最大的感觉就是:这完全靠智商硬核推公式啊。 d(ij)的约数个数预备知识: 我们切换一下枚举次序:(考验智商了) 莫比乌斯函数性质: ...

ccsu_cat 269

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

P3327-[SDOI2015]约数个数和【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P3327 题目大意 TTT组询问给出n,mn,mn,m,d(x)d(x)d(x)表示xxx的约数个数,求∑i=1n∑j=1md(i∗j)\sum_{i=1}^n\sum_{j=1}^md(i*j)i=1∑n​j=1∑m​d(i∗j) 解题思路 对于iii和jjj的两个约数a,ba,ba,b如果他们互质,那么a∗ba*ba∗b是i∗ji*ji∗j的约数,所以有 d(i∗j)=∑x∣i∑y∣j[gcd(x,y)==1]d(i

QuantAsk 399

P3327 [SDOI2015]约数个数和(莫反&整除分块)

P3327 [SDOI2015]约数个数和(莫反&整除分块) d(ij)=∑x∣i∑y∣j[gcd(x,y)=1]d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[gcd(x,y)=1]d(ij)=x∣i∑​y∣j∑​[gcd(x,y)=1] 该式子证明部分如下: 然后就是简单套路了。 ∑n∑m∑x∣i∑y∣j∑d∣x,d∣yμ(d)\large \sum\limits^n\sum\limits^m\sum\limits_{x|i}\sum\limits_{y

Harris-H的博客 540

P3327 [SDOI2015]约数个数和(莫比乌斯反演)

题目链接:点击这里 题目大意: 设 d(x)d(x)d(x) 为 xxx 的约数个数,有 ttt 组数据,每组数据给定 n,mn,mn,m 求: ∑i=1n∑j=1md(ij)\sum_{i=1}^n\sum_{j=1}^md(ij)i=1∑n​j=1∑m​d(ij) 题目分析: 这个题的一个难点就是要知道一个关于 d(x)d(x)d(x) 的式子: d(ij)=∑x∣i∑y∣j[gcd⁡(x,y)=1]d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1]d(ij)=x∣i∑​y∣

羊驼的博客 192

P3327 [SDOI2015] 约数个数和

首先我们很套路的设几个函数,(若不知道为什么那么设的话。这题的难点就是这个约数个数函数。看到这个[gcd(x,y)=1],我们就可以根据μ的性质把它带进去.对了以后的数学题不放代码,除非是知识点讲解,或者算法模板。更换枚举项,由枚举gcd(x,y)的约数,改为直接枚举d.需要莫比乌斯函数知识,主要是推式子。因为总有几个烧饼喜欢复制代码刷AC率。提出来:(因为它与i,j无关)我们设ans为求和最终值;

万物皆C++ 495

[Luogu P3327] [SDOI2015]约数个数和 (莫比乌斯反演)

题面: 传送门:洛咕 Solution 首先,我们需要一个结论: \(\large d(i,j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\) 证明 理性证明请看这篇博客的例五 本蒟蒻提供一个感性证明的方法:如果\(x*y\)是\(i*j\)的因数,我们必须有\(x|i,y|j\),而后面那个\(gcd(x,y)\)是用来去重的 有了这个柿子之后,我们之后的推导就比较...

weixin_30563917的博客 92

luogu P3327 [SDOI2015]约数个数和 莫比乌斯反演

题面 我的做法基于以下两个公式: \[[n=1]=\sum_{d|n}\mu(d)\] \[\sigma_0(i*j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\] 其中\(\sigma_0(n)\)表示\(n\)的约数个数 第一个公式是莫比乌斯函数的基本性质,至于第二个公式的证明,可以考虑\(i*j\)中每一个质因子对 \(\sigma_0(i*j)\) 的贡献...

baobi9069的博客 196
上一篇: P2522 [HAOI2011]Problem b
下一篇: (杜教筛)P4213 【模板】杜教筛(Sum)
guapi2333
博客等级 码龄9年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值