[SDOI2015]约数个数和

题目描述

设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$

输入输出格式

输入格式:

输入文件包含多组测试数据。第一行,一个整数\(T\),表示测试数据的组数。接下来的\(T\)行,每行两个整数\(N,M\)。

输出格式:

\(T\)行,每行一个整数,表示你所求的答案。

说明

\(1 \le N, M \le 50000\)

\(1 \le T \le 50000\)


Solution

引理\(1\):

\[\sum_{d|gcd(a,b)} \mu(d)=[gcd(a,b)=1]\]

引理\(2\):

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

可以通过\(d\)唯一分解后的计算式感性理解一下

剩下的暴力推个式子

\[\sum_{i=1}^a\sum_{j=1}^bd(ij)\]

\[=\sum_{i=1}^a\sum_{j=1}^b\sum_{x|i}\sum_{y|j}\sum_{d|gcd(x,y)}\mu(d)\]

暴力更换不太好枚举的一些东西(比如谁整除谁)

\[=\sum_{i=1}^a\sum_{j=1}^b\sum_{x|i}\sum_{y|j}\sum_{d=1}^{min(a,b)}\mu(d)[d|gcd(x,y)]\]

\[=\sum_{d=1}^{min(a,b)}\mu(d)\sum_{i=1}^a\sum_{j=1}^b\sum_{x|i}\sum_{y|j}[d|gcd(a,b)]\]

调整求和顺序

\[=\sum_{d=1}^{min(a,b)}\mu(d)\sum_{x=1}^a\sum_{y=1}^b[d|gcd(a,b)]\sum_{x|i}^a\sum_{y|j}^b 1\]

\[=\sum_{d=1}^{min(a,b)}\mu(d)\sum_{x=1}^a\sum_{y=1}^b[d|gcd(a,b)]\lfloor\frac{a}{x}\rfloor\lfloor\frac{b}{y}\rfloor\]

某一项太不好弄了,通过更改枚举项拿掉

\[=\sum_{d=1}^{min(a,b)}\mu(d)\sum_{x=1}^{\lfloor\frac{a}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{b}{d}\rfloor}\lfloor\frac{a}{dx}\rfloor\lfloor\frac{b}{dy}\rfloor\]

发现求和项也带有下取整,预处理前缀和以后直接整除分块就可以了。


Code:

#include <cstdio>
#define ll long long
const int N=5e4;
int pri[N+10],mu[N+10],ispri[N+10],f[N+10],cnt,T,a,b;
void init()
{mu[1]=1;for(int i=2;i<=N;i++){if(!ispri[i]){pri[++cnt]=i;mu[i]=-1;}for(int j=1;j<=cnt&&pri[j]*i<=N;j++){ispri[i*pri[j]]=1;if(i%pri[j]==0) break;else mu[i*pri[j]]=-mu[i];}}for(int i=1;i<=N;i++){mu[i]+=mu[i-1];for(int l=1,r;l<=i;l=r+1){r=i/(i/l);f[i]+=i/l*(r-l+1);}}
}
int min(int x,int y){return x<y?x:y;}
int main()
{init();scanf("%d",&T);while(T--){scanf("%d%d",&a,&b);ll ans=0;for(int l=1,r;l<=min(a,b);l=r+1){r=min(a/(a/l),b/(b/l));ans+=1ll*(mu[r]-mu[l-1])*f[a/l]*f[b/l];}printf("%lld\n",ans);}return 0;
}

2018.10.20

转载于:https://www.cnblogs.com/butterflydew/p/9821948.html

洛谷 [SDOI2015]约数个数和 解题报告相关推荐

  1. 【洛谷】P4147 玉蟾宫 解题报告

    [洛谷]P4147 玉蟾宫 解题报告 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...

  2. 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告

    P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...

  3. 洛谷 P4284 [SHOI2014]概率充电器 解题报告

    P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  4. 洛谷 CF1043F Make It One 解题报告

    CF1043F Make It One 题意 从一堆数中选择最少的数,使它们的\(\gcd=1\) 输入输出格式 输入格式 第一行:一个正整数\(n\). 第二行:\(n\)个正整数,给出了这个数列. ...

  5. 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告

    P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...

  6. 洛谷 P2324 [SCOI2005]骑士精神 解题报告

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  7. 洛谷 P2389 电脑班的裁员 解题报告

    题意: 给定一段长为N的序列,选取其中的至多M段使这些子段和最大. 当N=1000时,我们可以采用动态规划解法 令\(dp[i][j][k]\)代表当前选至位置\(i\)处于第\(j\)段当前是否选取 ...

  8. 洛谷 P2765 魔术球问题 解题报告

    P2765 魔术球问题 题目描述 问题描述: 假设有\(n\)根柱子,现要按下述规则在这\(n\)根柱子中依次放入编号为\(1,2,3,\dots\)的球. \((1)\) 每次只能在某根柱子的最上面 ...

  9. 洛谷 P2261 [CQOI2007]余数求和 解题报告

    P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...

最新文章

  1. 使用GetNextCell或者GetCell输出vtkCellArray的坐标点
  2. SQL查询分析器使用
  3. 实例1 -- 判断输入年份是否为闰年
  4. 一条语句执行跨越若干个数据库
  5. Java里面的arraycopy总结
  6. Java实现RPC框架
  7. mysql 事件 函数_MySQL 自定义函数和存储过程的使用
  8. cad在线转低版本_为什么别人CAD绘图总是比你快?因为他早就偷偷掌握了这几个技巧...
  9. bc8android汽车中控屛功能有哪些,安卓大屏功能强大 卡仕达顺车机一机全能
  10. Codeforces D546:Soldier and Number Game
  11. android服务之service(其二)关于aidl进程间通信,Android初级教程进程间的通信AIDL
  12. 禁用app里面的java_java – 我们可以禁用AOP调用吗?
  13. 浪潮信息能制造超级计算机吗,浪潮信息为中国航天探索事业出力 高性能计算技术领衔...
  14. 离散数学知识点及错题集合 第七章
  15. FastDFS——Bug篇——上传txt文档乱码
  16. 记录一个扫描二维码报错问题
  17. volte的sip信令流程_VoLTE主叫信令流程详解(有抓包截图详细介绍)
  18. php中上传图片的大小,php如何修改上传图片大小
  19. h5压缩图片 亲测有效
  20. python基础语法及知识总结,总有你想知道的

热门文章

  1. head()函数python_Python中的Pandas DataFrame head()方法
  2. Java Graphics2D类的绘图方法
  3. 肖仰华:知识图谱与认知智能
  4. 如何设计区块链项目的通证(token)模型
  5. Android BlueBorne (CVE-2017-0781)漏洞分析和利用
  6. JNI实现源码分析【二 数据结构】
  7. 美团Android资源混淆保护实践
  8. 关于fullcalendar里显示json格式的events(java)
  9. 连接多个oracle数据库的配置,oracle数据库连接配置文件
  10. python编写函数_python函数式编程