LOJ 题面传送门 / 洛谷题面传送门

题意:

  • 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\),\(d(x)\) 为 \(x\) 的约数个数。
  • \(n,m \leq 5 \times 10^4\)。

抛出一个引理:\(d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[\gcd(x,y)=1]\),该定理将在这篇博客结束证明。

知道这个定理之后,就可以按照套路开始推式子了:

\[\begin{aligned}&ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\\&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{x|i}\sum\limits_{y|j}[\gcd(x,y)=1]\\&=\sum\limits_{x=1}^n\sum\limits_{y=1}^m\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor\times[\gcd(x,y)=1]\\&=\sum\limits_{x=1}^n\sum\limits_{y=1}^m\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor\times\sum\limits_{p|\gcd(x,y)}\mu(p)\\&=\sum\limits_{p=1}^{\min(n,m)}\mu(p)\times\sum\limits_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{p}\rfloor}\lfloor\frac{n}{ip}\rfloor\lfloor\frac{m}{jp}\rfloor\\&=\sum\limits_{p=1}^{\min(n,m)}\mu(p)\times\sum\limits_{i=1}^{\lfloor\frac{n}{p}\rfloor}\lfloor\frac{n}{ip}\rfloor\times\sum\limits_{j=1}^{\lfloor\frac{m}{p}\rfloor}\lfloor\frac{m}{jp}\rfloor\end{aligned}
\]

令 \(t(x)=\sum\limits_{i=1}^x\lfloor\frac{x}{i}\rfloor\),则原式进一步转化为 \(\sum\limits_{p=1}^{\min(n,m)}\mu(p)\times t(\lfloor\frac{n}{p}\rfloor)\times t(\lfloor\frac{m}{p}\rfloor)\)。

整除分块预处理出 \(t(x)\),这样可以 \(\mathcal O(1)\) 求出 \(\sum\) 里面那堆东西。外面再套个整除分块就可以过了。时间复杂度 \(\mathcal O(T\sqrt{n}+n\sqrt{n})\)


最后再证明一下 \(d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[\gcd(x,y)=1]\):

假设 \(i,j\) 总共含有 \(p_1,p_2,\dots,p_k\) 这 \(k\) 个质因子,\(ij\) 有一个因子 \(c\)。

我们需证明每个 \(c\) 与一个互质数对 \((a,b)\ \ (a|i,b|j)\) 一一对应。

对于质因子 \(p_t\),假设 \(i\) 中包含 \(p_t^{x_1}\),\(j\) 中包含 \(p_t^{x_2}\),\(c\) 中包含 \(p_t^{x_3}\),显然 \(x_3 \leq x_1+x_2\)

如果 \(x_3 \leq x_1\),那么我们就在 \(a\) 中分配 \(p_t^{x_3}\)。

如果 \(x_3 > x_1\),那么我们就在 \(b\) 中分配 \(p_t^{x_3-x_1}\)。

显然 \(a,b\) 中最多一个包含质因子 \(p_t\),故 \(\gcd(a,b)=1\)。而每个 \(p_t\) 的分配方式又对应着一个 \(c\),故每个 \(c\) 与一个互质数对 \((a,b)\ \ (a|i,b|j)\) 一一对应,原命题得证。

/*
Contest: -
Problem: P3327
Author: tzc_wk
Time: 2020.9.1
*/
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define fz(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define foreach(it,v) for(__typeof(v.begin()) it=v.begin();it!=v.end();it++)
#define all(a) a.begin(),a.end()
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,0x3f,sizeof(a))
#define y1 y1010101010101
#define y0 y0101010101010
typedef pair<int,int> pii;
typedef long long ll;
inline int read(){
int x=0,neg=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') neg=-1;
c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*neg;
}
bool vis[50005];
ll mu[50005],pri[50005],sum[50005],pcnt=0;
inline void get_mu(){
mu[1]=1;
for(int i=2;i<=50000;i++){
if(!vis[i]){mu[i]=-1;pri[++pcnt]=i;}
for(int j=1;j<=pcnt&&pri[j]*i<=50000;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0) break;
else mu[pri[j]*i]=-mu[i];
}
}
for(int i=1;i<=50000;i++) sum[i]=sum[i-1]+mu[i];
}
inline ll calc(int x){
ll ans=0;for(int l=1,r;l<=x;l=r+1){
r=x/(x/l);
ans+=1ll*(r-l+1)*(x/l);
}
return ans;
}
int t[50005];
int main(){
get_mu();fz(i,1,50000) t[i]=calc(i);
int T=read();while(T--){
int n=read(),m=read();ll ans=0;
if(n>m) n^=m^=n^=m;
for(int l=1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
ans+=(sum[r]-sum[l-1])*t[n/l]*t[m/l];
}
printf("%lld\n",ans);
}
return 0;
}

LOJ #2185 / 洛谷 P3329 - [SDOI2015]约数个数和(莫比乌斯函数)的更多相关文章

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

    题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N​∑j=1M​d(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...

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

    Portal Description 共\(T(T\leq5\times10^4)\)组数据.给出\(n,m(n,m\leq5\times10^4)\),求\[\sum_{i=1}^n\sum_{j= ...

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

    题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...

  4. 洛谷 P3327 [SDOI2015]约数个数和 || Number Challenge Codeforces - 235E

    https://www.luogu.org/problemnew/show/P3327 不会做. 去搜题解...为什么题解都用了一个奇怪的公式?太奇怪了啊... 公式是这样的: $d(xy)=\sum ...

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

    传送门 公式太长了……我就直接抄一下这位大佬好了……实在懒得打了 首先据说$d(ij)$有个性质$$d(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]$$ 我们所求的答案为$ ...

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

    P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...

  7. 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演

    [BZOJ3994][SDOI2015]约数个数和 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...

  8. [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)

    [BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...

  9. 洛谷$P$3327 约数个数和 $[SDOI2015]$ 莫比乌斯反演

    正解:莫比乌斯反演 解题报告: 传送门! 先考虑证明一个结论,$d_{i\cdot j}=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]$ 看起来就很对的样子,但还是证下趴$QwQ ...

随机推荐

  1. Noip模拟72 2021.10.9

    T1 出了个大阴间题 真就以为他出了个大阴间题就没写,打个暴力就跑了 数据范围显然摆明是状压 设$f[sta][0/1]$表示在已经选择的集合$sta$中,$A$的最大值是$A$还是$A+1$ 然后按 ...

  2. 震惊,本Orzer下阶段直接怒送四个笑脸

    众所周知,在hzoi帝国中,Wzx是最菜的.那么究竟有多菜呢?下面就和小编一起来看看吧. 近日,hzoi最菜的wzx在第四阶段竟然怒送4个笑脸,同机房神犇直呼wzx太菜了! 以上就是wzx第四阶段怒送 ...

  3. 2021.8.4考试总结[NOIP模拟30]

    T1 毛衣衬 将合法子集分为两个和相等的集合. 暴力枚举每个元素是否被选,放在哪种集合,复杂度$O(3^n)$.考虑$\textit{meet in the middle}$. 将全集等分分为两部分分 ...

  4. 架构师之路-redis集群解析

    引子 上篇<架构师之路-https底层原理>里我提到了上面的整体视图,文章也介绍了想要真正能在工作中及时正确解决问题的基本功:原理理解透彻.今天以redis集群解析为例介绍一个及时敏锐的发 ...

  5. 整数转化 牛客网 程序员面试金典 C++ Python

    整数转化 牛客网 程序员面试金典 C++ Python 题目描述 编写一个函数,确定需要改变几个位,才能将整数A转变成整数B. 给定两个整数int A,int B.请返回需要改变的数位个数. 测试样例 ...

  6. hdu 1158 Employment Planning(DP)

    题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...

  7. JVM-内存区域与OOM

    本篇博客内容主要参考<深入理解Java虚拟机> 内存区域与内存溢出异常 运行时数据区 Java虚拟机运行时数据区: 程序计数器(Program Counter Register)是一块较小 ...

  8. 详细剖析Spring Cloud 和Spring Cloud Alibaba的前世今生

    我们知道spring cloud可以用来开发微服务,但是应该很少有人真正知道Spring Cloud是什么. 官方的解释是:spring cloud提供了一些可以让开发者快速构建分布式应用的工具,这些 ...

  9. Mysql基础教程:(七)MySQL基础练习

    MySQL基础练习 一.创建student和score表 CREATE TABLE student (id INT(10) NOT NULL PRIMARY KEY ,name VARCHAR(20) ...

  10. hudi clustering 数据聚集(一)

    概要 数据湖的业务场景主要包括对数据库.日志.文件的分析,而管理数据湖有两点比较重要:写入的吞吐量和查询性能,这里主要说明以下问题: 1.为了获得更好的写入吞吐量,通常把数据直接写入文件中,这种情况下 ...