题目大意

设d(x)为x的约数个数,\(t\)组询问,给定\(n,m\)(\(t,m,n\leq5*10^4\)),求$ \sum^n_{i=1}\sum^m_{j=1}d(i*j)$

题解

假设\(n\leq m\)
设\(i=p_1^{a_1}*p_2^{a_2}*...*p_k^{a_k},j=p_1^{b_1}*p_2^{b_2}*...*p_k^{b_k}\)
对于\(i*j\)的某个约数\(x\),设\(x=p_1^{c_1}*p_2^{c_2}*...*p_k^{c_k}\),那么可以用两个数\(e,f\)表示\(x\),当\(c_q\leq a_q\)时\(e\)的\(p_q\)的指数为\(c_q\),当\(c_q> a_q\)时\(f\)的\(p_q\)的指数为\(c_q-a_q\)
这样每个\(x\)都能对应到一对\((e,f)\)上,每对满足\(e|i,f|j,gcd(e,f)=1\)的\((e,f)\)也能对应到一个\(x\)上
所以就有\(d(i,j)=\sum_{e|i}\sum_{f|j}[gcd(e,f)=1]\)
原式=$ \sum^n_{i=1}\sum^m_{j=1}\sum_{e|i}\sum_{f|j}[gcd(e,f)=1]$
把枚举\(e,f\)放到前面,得原式=\(\sum_{e=1}^{n}\sum_{f=1}^{m}\lfloor\frac{n}{e}\rfloor\lfloor\frac{m}{f}\rfloor[gcd(e,f)=1]\)
=\(\sum_{e=1}^{n}\sum_{f=1}^{m}\lfloor\frac{n}{e}\rfloor\lfloor\frac{m}{f}\rfloor\sum_{i|e,i|f}\mu(i)\)
=\(\sum_{i=1}^{n}\mu(i)\sum_{i|e}^{n}{\lfloor\frac{n}{e}\rfloor}\sum_{i|f}^{m}{\lfloor\frac{m}{f}\rfloor}\)
=\(\sum_{i=1}^{n}\mu(i)\sum_{e=1}^{\lfloor\frac{n}{i}\rfloor}{\lfloor\frac{n}{e*i}\rfloor}\sum_{f=1}^{\lfloor\frac{m}{i}\rfloor}{\lfloor\frac{m}{f*i}\rfloor}\)
设\(g(x)=\sum_{i=1}^{x}{\lfloor\frac{x}{i}\rfloor}\),预处理\(g(x)\)
则原式=\(\sum_{i=1}^{n}{\mu(i)*g(n/i)*g(m/i)}\)
接下来整除分块就行了

代码
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define maxn 50010
#define lim 50000
#define LL long long
using namespace std;
int read()
{int x=0,f=1;char ch=getchar();while(!isdigit(ch)&&ch!='-')ch=getchar();if(ch=='-')f=-1,ch=getchar();while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x*f;
}
void write(LL x)
{if(x==0){putchar('0'),putchar('\n');return;}int f=0;char ch[20];if(x<0)putchar('-'),x=-x;while(x)ch[++f]=x%10+'0',x/=10;while(f)putchar(ch[f--]);putchar('\n');return;
}
int n,m,t,p[maxn],no[maxn],cnt;
LL f[maxn],g[maxn],mu[maxn];
int main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);mu[1]=p[1]=no[1]=1;rep(i,2,lim){if(!no[i])p[++cnt]=i,mu[i]=-1;for(int j=1;j<=cnt&&i*p[j]<=lim;j++){no[i*p[j]]=1;if(i%p[j]==0){mu[i*p[j]]=0;break;}else mu[i*p[j]]=-mu[i];}}rep(i,1,lim)mu[i]+=mu[i-1];rep(i,1,lim){for(int l=1,r=0;l<=i;l=r+1){r=i/(i/l);f[i]+=(LL)(i/l)*(LL)(r-l+1);}}t=read();while(t--){n=read(),m=read();LL ans=0;if(n>m)swap(n,m);for(int l=1,r=0;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));ans+=(mu[r]-mu[l-1])*f[n/l]*f[m/l];}write(ans);}return 0;
}

转载于:https://www.cnblogs.com/xzyf/p/10444842.html

并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和相关推荐

  1. P3327 [SDOI2015]约数个数和 (mobius反演)

    P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n​∑j=1m​d(ij ...

  2. P3327 [SDOI2015]约数个数和

    P3327 [SDOI2015]约数个数和 题意: 设 d(x) 为 x 的约数个数,给定 n,m,求 ∑i=1n∑j=1md(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m}d(i, ...

  3. luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)

    luogu P3327 [SDOI2015]约数个数和(rng58-clj等式) 题目大意 设d(x)d(x)d(x)为x的因子的个数,给出N和M求 ∑i=1n∑j=1md(i,j)\sum_{i=1 ...

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

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

  5. [BZOJ3994][SDOI2015]约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1104  Solved: 762 [Submit][St ...

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

    [SDOI2015]约数个数和 题意:\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^n\sum{j=1}^md(ij)\) 由结论得\[ans=\sum_{i=1}^n\sum_ ...

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

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

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

    题目描述 设d(x)为x的约数个数,给定N.M,求   输入 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. 输出 T行,每行一个整数,表示你 ...

  9. [bzoj3994] [SDOI2015]约数个数和

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

最新文章

  1. 网页开发 与数据联动的图_零基础学习数据可视化pyecharts人物关系图开发
  2. 对话百度贾磊/喻友平:深度学习正往跨领域融合高速发展
  3. 不知所“云”:小企业对云托管知之甚少
  4. java try catch 捕捉异常_java的 try-catch异常捕捉处理
  5. 网站外链优化布局和新增技巧介绍!
  6. python中的散点图代码-python – 带有图例的matplotlib散点图
  7. SharePoint 部署解决方案Feature ID冲突
  8. 信息学奥赛一本通(C++)在线评测系统——基础(三)数据结构 —— 1363:小球(drop)
  9. 【Linux】一步一步学Linux——usermod命令(86)
  10. python爬取糗事百科
  11. SAP Spartacus路由参数的默认配置
  12. 二分算法:平均值(洛谷 UVA1451)
  13. JVM调优总结(1):一些概念
  14. python亲密度_Python OpenCV 图像2D直方图,取经之旅第 25 天
  15. dz论坛php.ini设置,Discuz!X1.5至3.2论坛Win主机与Linux主机伪静态设置方法
  16. android item三种,Android RecyclerView中的ItemDecoration的几种绘制方法
  17. element-ui select单选切换多选问题解决
  18. Yearn已部署新YFI策略Brownie Mix
  19. 终于!孙宇晨和巴菲特吃上 3153 万元的晚餐,还送了一个比特币!
  20. php tp5 parent,[李景山php]每天TP5-20161225|thinkphp5-Console.php-2

热门文章

  1. BluePrint和ORM
  2. [BZOJ1419] Red is good(期望DP)
  3. 【笔记篇】C#笔记2
  4. [转载]全面解读软件版本的标志
  5. 〈转贴〉如何解决 Windows XP 中的硬件和软件驱动程序问题
  6. vue --- 全局配置过滤函数,使用moment函数来格式化时间
  7. es6 --- 用promise对象实现Ajax操作的一个实例
  8. 将Vue+Nodejs项目部署到阿里云服务器
  9. 免费节假日API 更新新功能了 新增农历信息返回
  10. 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制