传送门


首先有\(\varphi(ij) = \frac{\varphi(i) \varphi(j) \gcd(i,j)}{\varphi(\gcd(i,j))}\),把欧拉函数的定义式代入即可证明

然后就可以开始推式子(默认\(n \leq m\)):

\(\begin{align*} \sum\limits_{i=1}^n \sum\limits_{j=1}^m \varphi(ij) &= \sum\limits_{i=1}^n \sum\limits_{j=1}^m \frac{\varphi(i) \varphi(j) \gcd(i,j)}{\varphi(\gcd(i,j))} \\ &= \sum\limits_{d=1}^n \frac{d}{\varphi(d)} \sum\limits_{i=1}^{\frac{n}{d}} \sum\limits_{j=1}^{\frac{m}{d}} \varphi(id) \varphi(jd) \sum\limits_{p | i , p | j} \mu(p) \\ &= \sum\limits_{d=1}^n \frac{d}{\varphi(d)} \sum\limits_{p=1}^\frac{n}{d} \mu(p) \sum\limits_{i=1}^\frac{n}{dp} \varphi(idp) \sum\limits_{j=1}^\frac{m}{dp} \varphi(jdp) \\ &= \sum\limits_{T=1}^n \sum\limits_{d | T}\frac{d}{\varphi(d)} \mu(\frac{T}{d}) \sum\limits_{i=1}^\frac{n}{T} \varphi(iT) \sum\limits_{j=1}^\frac{m}{T} \mu(jT) \end{align*}\)

\(f(T) = \sum\limits_{d | T} \frac{d}{\varphi(d)} \mu(\frac{T}{d})\)可以在\(O(nlogn)\)的时间内预处理,而\(g(p,q) = \sum\limits_{i=1}^p \varphi(iq)\)则因为需要满足\(pq \leq n\)所以只有\(O(nlogn)\)对\((p,q)\)合法,使用动态数组可以做到\(O(nlogn)\)的预处理。

我们现在需要求的就是\(\sum\limits_{T = 1}^n f(T) g(\frac{n}{T} , T) g(\frac{m}{T} , T)\),注意到有两个除法,可以想到数论分块,但是因为是三个东西相乘求和,所以我们需要预处理的是对于\(\forall i \in [1,10^5] , \forall j \in [1 , 10^5] , \forall k \in [1,n] , \sum\limits_{T=1}^k f(T) g(i,T) g(j,T)\),复杂度太高难以接受,而直接暴力只有50pts。

注意到我们现在有预处理和暴力两种做法,虽然它们都会TLE,但是我们可以考虑根号分治,把它们放在一起做。

考虑预处理\(\forall i \in [1,B] , \forall j \in [1,B] , \forall k \in [1,n] , \sum\limits_{T=1}^k f(T) g(i,T) g(j,T)\),其中\(B\)是一个常数。那么我们预处理的复杂度就是\(O(nB^2)\),而在数论分块的过程中,如果\(\frac{n}{T} , \frac{m}{T}\leq B\)则直接调用答案,否则暴力计算,因为\(\frac{n}{T} \geq B\)意味着\(T \leq \frac{n}{B}\),所以复杂度是\(O(T\frac{n}{B})\)的。

那么总的复杂度就是\(O(nB^2 + \frac{Tn}{B})\),当\(B = T^\frac{1}{3}\)时有最优复杂度\(O(nT^\frac{2}{3})\)。

#include<bits/stdc++.h>
//this code is written by Itst
using namespace std; const int _ = 1e5 + 7 , MOD = 998244353 , B = pow(10000 , 1.0 / 3) + 1;
int phi[_] , mu[_] , prm[_] , cnt , T , N , M;
int *g[_] , f[_] , ans[B + 3][B + 3][_];
bool nprm[_]; int poww(long long a , int b){
int times = 1;
while(b){
if(b & 1) times = times * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return times;
} void init(){
mu[1] = phi[1] = 1;
for(int i = 2 ; i <= 1e5 ; ++i){
if(!nprm[i]){
prm[++cnt] = i; phi[i] = i - 1; mu[i] = -1;
}
for(int j = 1 ; i * prm[j] <= 1e5 ; ++j){
nprm[i * prm[j]] = 1;
if(i % prm[j] == 0){
phi[i * prm[j]] = phi[i] * prm[j];
break;
}
phi[i * prm[j]] = phi[i] * (prm[j] - 1);
mu[i * prm[j]] = -1 * mu[i];
}
}
for(int i = 1 ; i <= 1e5 ; ++i){
int tms = 1ll * i * poww(phi[i] , MOD - 2) % MOD;
for(int j = 1 ; j * i <= 1e5 ; ++j)
f[i * j] = (f[i * j] + 1ll * mu[j] * tms + MOD) % MOD;
}
for(int i = 1 ; i <= 1e5 ; ++i){
g[i] = new int[(int)(1e5 / i) + 1];
g[i][0] = 0;
for(int j = 1 ; j * i <= 1e5 ; ++j)
g[i][j] = (g[i][j - 1] + phi[i * j]) % MOD;
}
for(int i = 1 ; i <= B ; ++i)
for(int j = i ; j <= B ; ++j)
for(int k = 1 ; j * k <= 1e5 ; ++k)
ans[i][j][k] = (ans[i][j][k - 1] + 1ll * f[k] * g[k][i] % MOD * g[k][j]) % MOD;
} void work(){
cin >> N >> M;
if(N > M) swap(N , M);
int sum = 0;
for(int i = 1 , pi; i <= N ; i = pi + 1){
pi = min(N / (N / i) , M / (M / i));
if(N / i <= B && M / i <= B)
sum = (0ll + sum + ans[N / i][M / i][pi] - ans[N / i][M / i][i - 1] + MOD) % MOD;
else
for(int j = i ; j <= pi ; ++j)
sum = (sum + 1ll * f[j] * g[j][N / j] % MOD * g[j][M / j]) % MOD;
}
cout << sum << endl;
} signed main(){
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif
ios::sync_with_stdio(0);
init();
cin >> T;
while(T--) work();
return 0;
}

Luogu4240 毒瘤之神的考验 莫比乌斯反演、根号分治的更多相关文章

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

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

  2. luogu4240 毒瘤之神的考验(毒瘤乌斯反演)

    link 题意:求出\(\sum_{i=1}^n\sum_{j=1}^m\varphi(ij)\),对998244353取模 多组数据,\(T\le 10^4,n,m\le 10^5\). 前置知识: ...

  3. Codeforces.871D.Paths(莫比乌斯反演 根号分治)

    题目链接 \(Description\) 给定\(n\),表示有一张\(n\)个点的无向图,两个点\(x,y\)之间有权值为\(1\)的边当且仅当\(\gcd(x,y)\neq1\).求\(1\sim ...

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

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

  5. P4240 毒瘤之神的考验

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

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

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

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

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

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

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

  9. 从 [P4240 毒瘤之神的考验] 谈 OI 中的美学

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

随机推荐

  1. P3746 【[六省联考2017]组合数问题】

    题目是要我们求出如下柿子: \[\sum_{i=0}^{n}C_{nk}^{ik+r}\] 考虑k和r非常小,我们能不能从这里切入呢? 如果你注意到,所有组合数上方的数\(\%k==r\),那么是不是 ...

  2. 58、Spark Streaming: DStream的output操作以及foreachRDD详解

    一.output操作 1.output操作 DStream中的所有计算,都是由output操作触发的,比如print().如果没有任何output操作,那么,压根儿就不会执行定义的计算逻辑. 此外,即 ...

  3. php 进制转换base_convert

    16进制 转为 8进制 base_convert(number,frombase,tobase); 参数 描述 number 必需.规定要转换的数. frombase 必需.规定数字原来的进制.介于 ...

  4. mapreduce中reduce没有执行

    hadoop执行mapreduce过程reduce不执行原因 1.如果你的map过程中没有context.write()是不执行reduce过程的:2.如果你的map过程中context.write( ...

  5. Eclipse 高亮显示(pydev 编辑 python)

    因为是使用pydev编辑的python,所以需要修改(pydev)的属性. Window->Preferences->General->Editors->Text Editor ...

  6. 两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hash code ,这 句话对不对

    答:不对,有相同的 hash code这是java语言的定义:1) 对象相等则hashCode一定相等:2) hashCode相等对象未必相等 1.如果是基本变量,没有hashcode和equals方 ...

  7. Jmeter工具功能介绍

    可以去官方学习:http://jmeter.apache.org/ 1.可以修改语言 2.部分图标功能 新建 打开一个jmeter脚本 保存一个jmeter脚本 剪切 复制 粘贴 展开目录树 收起目录 ...

  8. bookdown - 撰写和发表自己的网络书籍/文档

    BOOKDOWN官网 - bookdown上有不少人发布了自己的电子书 bookdown-demo (一个demo,github源码)- Rstudio出品,Yihui Xie开发,著名单细胞课程在用 ...

  9. Python 开发版本指导与资源

    Python 文档:https://docs.python.org/3/ 下载 下载这些文件 文档版本 Python 3.9(开发中) Python 3.8(稳定) Python 3.7(稳定) Py ...

  10. UltraEdit 的“查看方式”着色类项型

    UltraEdit 的“查看方式”着色类项型 2011年06月22日 13:16:00 cnki_ok 阅读数 5722   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请 ...