洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)
先扯些别的。
2021 年 7 月的某一天,我和 ycx 对话:
- tzc:你做过哪些名字里带“毒瘤”的题目,我做过一道名副其实的毒瘤题就叫毒瘤,是个虚树+dp
- ycx:还有毒瘤之神的考验
- tzc:???那是个啥?
- ycx:一道数论水题
然后我便做到了这个题,然后却发现它一点也不水……
跑题了跑题了
首先我们显然不可能硬着头皮算 \(\varphi(ij)\),肯定要想办法将 \(\varphi(ij)\) 中的 \(i,j\) 独立开来。通过这题的套路可知 \(\varphi(ij)=\dfrac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi(\gcd(i,j))}\),于是下面我们就可以开始推式子了:
ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\varphi(ij)\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\dfrac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi(\gcd(i,j))}\\
&=\sum\limits_{d=1}^{\min(n,m)}\dfrac{d}{\varphi(d)}\sum\limits_{d\mid i}\sum\limits_{d\mid j}\varphi(i)\varphi(j)[\gcd(i,j)=d]\\
&=\sum\limits_{d=1}^{\min(n,m)}\dfrac{d}{\varphi(d)}\sum\limits_{i=1}^{n/d}\sum\limits_{j=1}^{m/d}\varphi(id)\varphi(jd)[i\perp j]\\
&=\sum\limits_{d=1}^{\min(n,m)}\dfrac{d}{\varphi(d)}\sum\limits_{p=1}^{\min(n,m)/d}\mu(p)\sum\limits_{i=1}^{n/dp}\sum\limits_{j=1}^{m/dp}\varphi(idp)\varphi(jdp)
\end{aligned}
\]
如果我们记 \(f(n)=\sum\limits_{d\mid n}\dfrac{d}{\varphi(d)}·\mu(\dfrac{n}{d})\),\(S(n,m)=\sum\limits_{i=1}^m\varphi(ni)\),那么
ans&=\sum\limits_{T=1}^{\min(n,m)}f(T)S(T,\lfloor\dfrac{n}{T}\rfloor)S(T,\lfloor\dfrac{m}{T}\rfloor)
\end{aligned}
\]
\(f\) 显然可以调和级数地求出,有用的 \(S(n,m)\) 的个数也是 \(n\ln n\) 级别的,因此暴力计算上式可实现 \(Tn+n\ln n\) 的复杂度,无法通过。直接整除分块看起来不太容易的亚子,这就使我们陷入了一个比较尴尬的局面。但是一个非常直观的 observation 是当 \(T\) 比较大时,可能的 \((\lfloor\dfrac{n}{T}\rfloor,\lfloor\dfrac{m}{T}\rfloor)\) 组成的二元组并不是特别多。因此考虑从这个角度入手。记 \(B=316\),对于 \(T\le B\),我们暴力计算即可,对于 \(T>B\),写个程序算一下可以发现 \(\sum\limits_{i=317}^{10^5}\lfloor\dfrac{10^5}{i}\rfloor^2\) 只有大概 \(3\times 10^7\) 的样子,因此这部分我们就预处理时,暴力枚举所有可能的 \((\lfloor\dfrac{n}{T}\rfloor,\lfloor\dfrac{m}{T}\rfloor)\),然后前缀和算一下贡献,这样每次询问整除分块即可求出这部分 \(T\) 的贡献。
时间复杂度 \(T\sqrt{n}+n\sqrt{n}+n\ln n\),可以通过。
const int MAXN=1e5;
const int B=316;
int inv[MAXN+5],pr[MAXN/7+5],prcnt=0,phi[MAXN+5],vis[MAXN+5],f[MAXN+5],mu[MAXN+5];
vector<int> s[MAXN+5],ss[B+4][B+4];
void init(){
for(int i=(inv[0]=inv[1]=1)+1;i<=MAXN;i++) inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
phi[1]=mu[1]=1;
for(int i=2;i<=MAXN;i++){
if(!vis[i]) phi[i]=i-1,mu[i]=-1,pr[++prcnt]=i;
for(int j=1;j<=prcnt&&pr[j]*i<=MAXN;j++){
vis[pr[j]*i]=1;
if(i%pr[j]==0){phi[i*pr[j]]=phi[i]*pr[j];break;}
phi[i*pr[j]]=phi[i]*phi[pr[j]];mu[i*pr[j]]=-mu[i];
}
}
for(int i=1;i<=MAXN;i++) for(int j=i;j<=MAXN;j+=i)
f[j]=(0ll+f[j]+1ll*i*inv[phi[i]]%MOD*mu[j/i]%MOD+MOD)%MOD;
for(int i=1;i<=MAXN;i++){
s[i].resize(MAXN/i+1);
for(int j=1;j<=MAXN/i;j++) s[i][j]=(s[i][j-1]+phi[i*j])%MOD;
}
for(int i=1;i<=B+1;i++) for(int j=1;j<=B+1;j++){
ss[i][j].pb(0);int sum=0;
for(int k=B+1;k<=MAXN;k++){
if(k*i>MAXN||k*j>MAXN) break;
sum=(sum+1ll*f[k]*s[k][i]%MOD*s[k][j])%MOD;
ss[i][j].pb(sum);
}
}
}
int main(){
init();int qu;scanf("%d",&qu);
while(qu--){
int n,m;scanf("%d%d",&n,&m);int res=0;
for(int i=1;i<=B;i++) res=(res+1ll*f[i]*s[i][n/i]%MOD*s[i][m/i])%MOD;
for(int l=B+1,r;l<=min(n,m);l=r+1){
r=INF;
if(n/l) chkmin(r,n/(n/l));
if(m/l) chkmin(r,m/(m/l));
res=(0ll+res+ss[n/l][m/l][r-B]-ss[n/l][m/l][l-B-1]+MOD)%MOD;
}
printf("%d\n",res);
}
return 0;
}
洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)的更多相关文章
- 洛谷 P4240 毒瘤之神的考验 解题报告
P4240 毒瘤之神的考验 题目背景 \(\tt{Salamander}\)的家门口是一条长长的公路. 又是一年春天将至,\(\tt{Salamander}\)发现路边长出了一排毒瘤! \(\tt{S ...
- 洛谷P4240 毒瘤之神的考验 【莫比乌斯反演 + 分块打表】
题目链接 洛谷P4240 题解 式子不难推,分块打表真的没想到 首先考虑如何拆开\(\varphi(ij)\) 考虑公式 \[\varphi(ij) = ij\prod\limits_{p | ij} ...
- P4240 毒瘤之神的考验
题目 P4240 毒瘤之神的考验 神仙题\(emmm\) 前置 首先有一个很神奇的性质: \(\varphi(ij)=\dfrac{\varphi(i)\varphi(j)gcd(i,j)}{\var ...
- 从 [P4240 毒瘤之神的考验] 谈 OI 中的美学
感觉这题真的特别有意思,涉及了 OI 中很多非常有意思.非常美的手法,比如--平衡两部分的时间复杂度.\(n \ln n\) 的那个 Trick等等,真的一种暴力的美学. 题目大意: 多组询问,求 \ ...
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)
To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...
- [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)
[NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...
- 洛谷P2783 有机化学之神偶尔会作弊
题目传送门 啦啦啦,发个文纪念一下第一道在洛谷上A的黑题,一次性就过真是无比舒服-(虽然某些大佬说这题有点水……)题目其实思路不难,Tarjan缩点+LCA,不过因为是无向边,所以在Tarjan的时候 ...
- [luogu 4240] 毒瘤之神的考验
题目背景 Salamander的家门口是一条长长的公路. 又是一年春天将至,Salamander发现路边长出了一排毒瘤! Salamander想带一些毒瘤回家,但是,这时毒瘤当中钻出来了一个毒瘤之神! ...
- 洛谷 P6783 - [Ynoi2008] rrusq(KDT+势能均摊+根号平衡)
洛谷题面传送门 首先显然原问题严格强于区间数颜色,因此考虑将询问离线下来然后用某些根号级别复杂度的数据结构.按照数颜色题目的套路,我们肯定要对于每种颜色维护一个前驱 \(pre\),那么答案可写作 \ ...
随机推荐
- 什么是关系图 (ERD)?
首先,什么是实体关系图? 实体关系图,也称为ERD,ER图或ER模型,是一种用于数据库设计的结构图.一个ERD包含不同的符号和连接器,它们可视化两个重要信息:系统范围内的主要实体,以及这些实体之间的相 ...
- ffmpeg剪视频
ffmpeg裁剪合并视频 ffmpeg提供简单的命令参数: ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTP ...
- 第31篇-方法调用指令之invokevirtual
invokevirtual字节码指令的模板定义如下: def(Bytecodes::_invokevirtual , ubcp|disp|clvm|____, vtos, vtos, invokevi ...
- WebGL着色器渲染小游戏实战
项目起因 经过对 GLSL 的了解,以及 shadertoy 上各种项目的洗礼,现在开发简单交互图形应该不是一个怎么困难的问题了.下面开始来对一些已有业务逻辑的项目做GLSL渲染器替换开发. 起因是看 ...
- Noip模拟37 2021.8.12
T1 数列 真是考场上不是数学的乱推柿子,想定理,是数学的没想出来.. 比较悲伤... 列柿子不用动脑子,就是没有想出来$EXgcd$解不定方程,淦.. 解处一组解后利用比较显然的性质: $x+\fr ...
- 树链剖分好(du)题(liu)选做
1.luogu P4315 月下"毛景树" 题目链接 前言: 这大概是本蒟蒻A掉的题里面码量最大的一道题了.我自认为码风比较紧凑,但还是写了175行. 从下午2点多调到晚上8点.中 ...
- 2021.8.17考试总结[NOIP42]
$\huge{取模不能比大小!}$ $\huge{取模不能比大小!}$ $\huge{取模不能比大小!}$ 有了打地鼠的前车之鉴,我深信树规板子是可以出现在联赛题里的. 所以T1十分钟码完直接溜了,后 ...
- C/C++编程笔记:浪漫流星雨表白装b程序
作为一个未来可能会成为一个专业程序员的小伙们,不知道你们现在学到哪里了,学了点东西之后有没有想在你女朋友面前装个大大的b呢,今天小编就给你一个机会来研究一下下边的代码吧,保证大写的N,当然大佬是排除在 ...
- JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字
public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静 ...
- PHP怎样写延时队列(定时器)
背景 PHP没有定时器,依托的都是crontab这样的系统工具,也没有go中defer这样的延时方法,本文介绍几种PHP写延时队列的几种姿势. 延时队列的定义 普通的队列是先进先出,但是延时队列并不是 ...