又是一道卡常好题

坑掉我的 \(define \space int \space long \space long\) 感觉出题人并没有获得什么快乐……

Description

link

题意概述:

设 \(d(x)\) 为 \(x\) 的约数个数,求:

\[\sum_{i=1}^n \sum_{j=1}^n d(ij)
\]

多组询问,\(1\leq n,m,T \leq 5 \times10^4\)

Solution

首先给一个引理:

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

证明:参考\(@Siyuan\)的博客,好像可以用映射法?

\[Begin
\]

我们把式子转化一下:

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

(四个\(\sum\)好恐怖?)

然后改变求和的次序,首先枚举因数 \(x\) 和 \(y\) :

(这一步转化可以考虑用\(1\)到\(a\)中\(b\)的倍数个数来理解)

\[\sum_{x=1}^n \sum_{y=1}^n \lfloor \frac{n}{x}\rfloor \lfloor \frac{m}{y} \rfloor[gcd(x,y)=1]
\]

换一下,我们把这个 \(x\) 和 \(y\) 换成 \(i\) 和 \(j\)

\[\sum_{i=1}^n \sum_{j=1}^n \lfloor \frac{n}{i}\rfloor \lfloor \frac{m}{j} \rfloor[gcd(i,j)=1]
\]

下一步开始反演,根据套路式,设:

\[f(x)=\sum_{i=1}^n \sum_{j=1}^n \lfloor \frac{n}{i}\rfloor \lfloor \frac{m}{j} \rfloor[gcd(i,j)=1]
\]

\[g(x)=\sum_{x|d} f(d)
\]

所以得到关于 \(g(x)\) 的表达式:

\[g(x)=\sum_{i=1}^n \sum_{j=1}^n \lfloor \frac{n}{i}\rfloor \lfloor \frac{m}{j} \rfloor[x|gcd(i,j)]
\]

把 \(x\) 提出来,同时去掉 \(gcd\)

\[g(x)=\sum_{i=1}^{\frac{n}{x}}\sum_{j=1}^{\frac{m}{x}} \lfloor \frac{n}{ix} \rfloor \lfloor \frac{m}{jx} \rfloor
\]

再根据\(f(x)\)的定义,得到答案为\(f(1)\)

又有:

\[f(x)=\sum_{n|d} \mu(\frac{d}{n}) g(d)
\]

所以有

\[Ans=\sum_{i=1}^n \mu(i)g(i)
\]

我们预处理\(s(x)=\sum^{x}_ {i=1} \lfloor \frac{x}{i}\rfloor\)然后就可以快速求解本题

\[Finished
\]

Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define reg register
namespace yspm{
inline int read()
{
int res=0,f=1; char k;
while(!isdigit(k=getchar())) if(k=='-') f=-1;
while(isdigit(k)) res=res*10+k-'0',k=getchar();
return res*f;
}
const int N=5e4+10;
int tot,mu[N],pri[N];ll s[N];
bool fl[N];
inline void prework()
{
mu[1]=1;
for(reg int i=2;i<N;++i)
{
if(!fl[i]) mu[i]=-1,pri[++tot]=i;
for(reg int j=1;j<=tot&&i*pri[j]<N;++j)
{
fl[i*pri[j]]=1;
if(i%pri[j]==0){mu[i*pri[j]]=0; break;}
else mu[i*pri[j]]=-mu[i];
}
} for(reg int i=1;i<N;++i) mu[i]+=mu[i-1];
for(reg int x=1;x<N;++x)
{
ll res=0;
for(reg int l=1,r;l<=x;l=r+1){r=x/(x/l); res+=1ll*(r-l+1)*(x/l);}
s[x]=res;
}
return ;
}
inline void work()
{
int n=read(),m=read(); if(n>m) swap(n,m);
ll ans=0; for(reg int l=1,r;l<=n;l=r+1){r=min(n/(n/l),m/(m/l)); ans+=1ll*(mu[r]-mu[l-1])*s[n/l]*s[m/l];}
return printf("%lld\n",ans),void();
}
signed main()
{
prework(); int T=read(); while(T--) work();
return 0;
}
}
signed main(){return yspm::main();}

LGOJ3327 【SDOI2015】约数个数和的更多相关文章

  1. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

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

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

    P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...

  3. 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)

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

  4. 洛谷 [SDOI2015]约数个数和 解题报告

    [SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...

  5. BZOJ 3994: [SDOI2015]约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 898  Solved: 619[Submit][Statu ...

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

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

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

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

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

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

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

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

  10. 【BZOJ】3994: [SDOI2015]约数个数和

    题意: \(T(1 \le T \le 50000)\)次询问,每次给出\(n, m(1 \le n, m \le 50000)\),求\(\sum_{i=1}^{n} \sum_{j=1}^{m} ...

随机推荐

  1. Java学生管理系统(IO版)

    图解: cade: student.java /* * 这是我的学生类 */ public class Student { //学号 private String id; //姓名 private S ...

  2. 干货 | 运维福音——Terraform自动化管理京东云

    干货 | 运维福音--Terraform自动化管理京东云 原创: 张宏伟 京东云开发者社区  昨天 Terraform是一个高度可扩展的IT基础架构自动化编排工具,主张基础设施即代码,可通过代码集中管 ...

  3. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  4. zip4j 2.0压缩 加密压缩

    https://github.com/srikanth-lingala/zip4j ZipParameters zipParameters = new ZipParameters(); zipPara ...

  5. vue整合外部js

    vue引入外部jsimport { TrackLine } from "../../../../../static/js/trajectory.js";import { initM ...

  6. 十二星座 英文名:Aries 金牛座 (4/21 - 5/20)的英文名: Taurus 双子座 (5/21 - 6/21)的英文名: Gemini 巨蟹座 (6/22 - 7/22)的英文名: Cancer 狮子座 (7/23 - 8/22)的英文名: Leo 处女座/室女座 (8/23 - 9/22)的英文名: Virgo 天秤座 (9/2

    十二星座的具体顺序是:白羊座(Aries).金牛座(Taurus).双子座(Gemini).巨蟹座(Cancer).狮子座(Leo).处女座(Virgo).天秤座(Libra).天蝎座(Scorpio ...

  7. u-boot中filesize环境变量【转载】

    转载地址:https://blog.csdn.net/fzs333/article/details/48518559 U-Boot中的环境命令可以使用$(filesize)来确定刚下载(传输)得到的文 ...

  8. 完整注册登陆php源码,附带session验证。

    1.首先先写表单页面login.html. <!DOCTYPE html> <html lang="en"> <head>     <me ...

  9. StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.

    当时VS CODE内嵌的jupyter 交互界面的时候,出现了这个错误 原因是,这样的界面不支持行输入.可以使用cmd终端或其他方式运行该文件进行交互输入

  10. Mybatis配置文件无故报错、无自动完成提示的解决方法,及自动生成主要配置项

    1.引子 Mybatis配置文件显示红叉有错误,而实际检查又没有错误,这是因为开发环境不能识别这种类型的xml文件.要解决这个问题,就要让IDE开发环境能够“认识”这个文件类型,我们要让IDE环境将这 ...