感觉这题真的特别有意思,涉及了 OI 中很多非常有意思、非常美的手法,比如——平衡两部分的时间复杂度、\(n \ln n\) 的那个 Trick等等,真的一种暴力的美学。

题目大意:

多组询问,求 \(f_{n,m}=\sum\limits_{i=1}^n\sum\limits_{j=1}^m \varphi(i\cdot j)\),\(1 \le n,m \le 1e5\),\(T \le 1e4\).

解法:

这里用一个套路一点的式子:\(\varphi(i\cdot j)=\frac{\varphi(i)\cdot \varphi(j)\cdot \gcd(i,j)}{\varphi(\gcd(i,j))}\),于是我们可以得到:

\[f_{n,m}=\sum_{i=1}^n\sum_{j=1}^m \frac{\varphi(i)\cdot \varphi(j)\cdot \gcd(i,j)}{\varphi(\gcd(i,j))}
\]

运用上面那个式子的意义在于现在所有的参数都在值域 \([1,\min(n,m)]\) 之内了,于是我们可以将相同的东西提出来,也就是我上一篇博客中提到的那种方法,得到:

\[f_{n,m}=\sum_{d=1}^{\min(n,m)} \frac{d}{\varphi(d)} \sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor} \sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}\varepsilon\left(\gcd(i,j)\right)\varphi(id)\varphi(jd)
\]

运用莫比乌斯反演得的意义在于,它把条件式又转化为了贡献式,使它可以快速球和,于是我们运用莫反,并将 \(\mu\) 提出来:

\[f_{n,m}=\sum_{x=1}^{\min(n,m)}\frac{x}{\varphi(x)}\sum_{y=1}^{\left\lfloor \frac{\min(n,m)}{x}\right\rfloor}\mu(y)\sum_{i=1}^{\left \lfloor \frac{n}{xy} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{xy} \right \rfloor} \varphi(ixy)\varphi(jxy)
\]

遇到这样挺极致的情况,我们可以提出一个 \(T=xy\),然后枚举 \(T\) 的因数,以期实现莫反/调和级数的效果。得到:

\[f_{n,m}=\sum_{T=1}^{\min(n,m)} \left(\sum_{x|T} \frac{x}{\varphi(x)} \mu\left(\frac{T}{x}\right)\right)\cdot \left(\sum_{i=1}^{\left \lfloor \frac{n}{T} \right \rfloor}\varphi(iT)\right)\cdot \left(\sum_{j=1}^{\left \lfloor \frac{m}{T} \right \rfloor}\varphi(jT)\right)
\]

我们设 \(g(T)=\sum_{x|T} \frac{x}{\varphi(x)} \mu(\frac{T}{x})\),\(h(n,T)=\sum_{i=1}^{\left \lfloor n \right \rfloor}\varphi(iT)\),于是:

\[f_{n,m}=\sum_{T=1}^{\min(n,m)}g(T)\cdot h(\left\lfloor \frac{n}{T} \right\rfloor,T)\cdot h(\left\lfloor \frac{m}{T} \right\rfloor,T)
\]

注意到 \(g\) 中,\(\sum\limits x \le n \ln n\);\(h\) 中,\(nT \le n \ln n\),所以这两个东西都可以用调和级数预处理出来,于是我们有了一个 \(\Theta(nT)\) 的做法,这是调和级数的美。

考虑继续优化。因为右手边的东西含有下取整,所以我们考虑整除分块;但是这个整除分块中 \(h\) 函数同时含有这两种参数,所以我们考虑前缀和优化:

\[t_{n,m,d}=\sum_{i=1}^d g(i)\cdot g(n,i) \cdot g(m,i)
\]

这个显然过于庞大无法预处理,并且没什么办法快速求值;一旦预处理,询问只要 \(\Theta(\sqrt n)\),但是预处理会超时;一旦不预处理,那么询问会超时,所以我们考虑 平衡两部分时间复杂度

具体来说,我们预处理 \(n\le S\) 且 \(m \le S\),的部分,复杂度 \(nS^2\);查询的时候我们暴力查询 \(\left[ 1, \left\lceil \frac{\min(n,m)}{S}\right\rceil \right]\) 的部分;其余的因为 \(\left \lfloor \frac{n}{T} \right \rfloor\) 都小于等于 \(S\),所以可以整除分块了查询。

总的时间复杂度就等于 \(\gamma = n \ln n + nS^2+T\cdot\left( \sqrt S + \frac{n}{S}\right)\),当 \(\frac{\partial \gamma}{\partial S}=2nS-\frac{Tn}{S^2}+\frac{T}{2\sqrt S}=0\) 时最优,大概是 \(S=50\),并且总的可以在 \(0.5s\) 之内跑出来,这是 平衡之美

代码:https://www.luogu.com.cn/paste/hxjugkts.

从 [P4240 毒瘤之神的考验] 谈 OI 中的美学的更多相关文章

  1. 洛谷 P4240 毒瘤之神的考验 解题报告

    P4240 毒瘤之神的考验 题目背景 \(\tt{Salamander}\)的家门口是一条长长的公路. 又是一年春天将至,\(\tt{Salamander}\)发现路边长出了一排毒瘤! \(\tt{S ...

  2. P4240 毒瘤之神的考验

    题目 P4240 毒瘤之神的考验 神仙题\(emmm\) 前置 首先有一个很神奇的性质: \(\varphi(ij)=\dfrac{\varphi(i)\varphi(j)gcd(i,j)}{\var ...

  3. 洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)

    洛谷题面传送门 先扯些别的. 2021 年 7 月的某一天,我和 ycx 对话: tzc:你做过哪些名字里带"毒瘤"的题目,我做过一道名副其实的毒瘤题就叫毒瘤,是个虚树+dp yc ...

  4. 洛谷P4240 毒瘤之神的考验 【莫比乌斯反演 + 分块打表】

    题目链接 洛谷P4240 题解 式子不难推,分块打表真的没想到 首先考虑如何拆开\(\varphi(ij)\) 考虑公式 \[\varphi(ij) = ij\prod\limits_{p | ij} ...

  5. [luogu 4240] 毒瘤之神的考验

    题目背景 Salamander的家门口是一条长长的公路. 又是一年春天将至,Salamander发现路边长出了一排毒瘤! Salamander想带一些毒瘤回家,但是,这时毒瘤当中钻出来了一个毒瘤之神! ...

  6. [技术]浅谈OI中矩阵快速幂的用法

    前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...

  7. 浅谈OI中的底层优化!

    众所周知,OI中其实就是算法竞赛,所以时间复杂度非常重要,一个是否优秀的算法或许就决定了人生,而在大多数情况下,我们想出的算法或许并不那么尽如人意,所以这时候就需要一中神奇的的东西,就是底层优化: 其 ...

  8. luogu 4240 毒瘤之神的考验 (莫比乌斯反演)

    题目大意:略 题面传送门 果然是一道神duliu题= = 出题人的题解传送门 出题人的题解还是讲得很明白的 1.关于$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m ...

  9. Luogu 4240:毒瘤之神的考验

    传送门 Sol 分开考虑 \(\varphi(ij)\) 中 \(ij\) 的质因子 那么 \[\varphi(ij)=\frac{\varphi(i)\varphi(j)gcd(i,j)}{\var ...

随机推荐

  1. 4.14——208. 实现 Trie (前缀树)

    前缀树(字典树)是经典的数据结构,以下图所示: 本来处理每个节点的子节点集合需要用到set,但是因为输入规定了只有26个小写字母,可以直接用一个[26]的数组来存储. 关于ASCII代码: Java ...

  2. 面试题系列:new String("abc")创建了几个对象

    new String("abc")创建了几个对象 面试官考察点猜想 这种问题,考察你对JVM的理解程度.涉及到常量池.对象内存分配等问题. 涉及背景知识详解 在分析这个问题之前,我 ...

  3. Scrum Meeting 0429

    零.说明 日期:2021-4-29 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成部分后端管理 ...

  4. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  5. Hash算法:双重散列

    双重散列是线性开型寻址散列(开放寻址法)中的冲突解决技术.双重散列使用在发生冲突时将第二个散列函数应用于键的想法. 此算法使用: (hash1(key) + i * hash2(key)) % TAB ...

  6. Codeforces 1009E Intercity Travelling | 概率与期望

    题目链接 题目大意: 一个人要从$A$地前往$B$地,两地相距$N$千米,$A$地在第$0$千米处,$B$地在第$N$千米处. 从$A$地开始,每隔$1$千米都有$\dfrac{1}{2}$的概率拥有 ...

  7. jquery 实现 <imput>标签 密码框显示/隐藏密码功能

    1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  8. php swoft redis 发布和订阅

    //订阅 public function subscribe() { /* @var \Swoft\Redis\Redis $redis */ $redis = App::getBean(\Swoft ...

  9. Xshell Error Report,Program has stopped working

    xftp和xshell突然都无法运行并报错如图 图中的意思是,xshell有错误,官方想收集错误.可是也不能给你发送了,还这样啊. 解决办法 1.卸载Xshell和Xftp,重新安装. 参考:http ...

  10. Java学习(十八)

    学习了Web中的单位. 像素是网页中最常用到的单位,一个像素是屏幕中的一个小点. 不同显示器一个像素的大小也不同,像素越小,显示效果越好. 也可以用百分比的方式: <!DOCTYPE html& ...