Description

设d(x)为x的约数个数,给定1<=T<=50000 组1<=N, M<=50000 ,求


有一个公式$$d(ij)=\sum_{x|i}\sum_{y|j}[gcd(i,j)=1]$$

先简单证明一下

如果\(p_1^{k_1}|i\wedge p_1^{k_2}|j\) ,那么对于\(ij\)的一个因子\(p_1^{k_3}\) ,如果\(k_3\leq k_1\)我们就假设\(p_1^{k_3}\)全部来自于\(i\),不然就是\(k_1\)来自于\(i\),剩余部分\(k_3-k_1\)来自\(k_2\)这样的话,如果\(p_1^{k_3}|x\)就表示含有\(p_1^{k_3}\)的那个因数,如果\(p_1^{k_3}|y\)就表示含有\(p_1^{k_1+k_3}\) 的那个因数。就可以表示出全部因数!这时\(gcd(i,j)\neq 1\)的表示是没有意义的!

然后就可以开始欢乐的画柿子了

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

\[=\sum_x^n\sum_y^m\lfloor\frac n x\rfloor\lfloor\frac m y\rfloor\sum_{k|x\wedge k|y}\mu(k)
\]

\[=\sum_{k=1}^{min(n,m)}\mu (k)\sum_{x=1}^{\lfloor\frac n x\rfloor}\sum_{y=1}^{\lfloor\frac m y\rfloor}\lfloor\frac n {xk}\rfloor\lfloor\frac m {yk}\rfloor
\]

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

恩...

预处理一个函数\(g(x)=\sum_{i=1}^x \lfloor \frac x i\rfloor\)

后面那一块$$\sum_{x=1}^{\lfloor\frac n x\rfloor}\sum_{y=1}^{\lfloor\frac m y\rfloor}\lfloor\frac {\lfloor\frac n k\rfloor} x\rfloor\lfloor\frac {\lfloor\frac m k\rfloor} y\rfloor$$

就可以在这个基础上整除分块了啊,整个的时间复杂度\(O(T\sqrt n)\)


#include<iostream>
#include<cstdio>
#include<cstring>
#define M 50001
#define LL long long
using namespace std; int m,n,k,cnt,p[M],b[M],x,y;
LL mu[M],g[M]; void Mu()
{
mu[1]=1;
for(int i=2;i<M;i++)
{
if(!b[i]) {p[++cnt]=i, mu[i]=-1;}
for(int j=1;j<=cnt && p[j]*i<M;j++)
{
b[i*p[j]]=1; if(i%p[j]==0) break;
mu[i*p[j]]=-mu[i];
}
}
for(int i=2;i<M;i++) mu[i]+=mu[i-1];
} int main()
{
Mu();
for(int i=1;i<M;i++)
for(int l=1,r;l<=i;l=r+1)
{
r=i/(i/l);
g[i]+=(r-l+1ll)*((LL)i/l);
}
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y); LL ans=0; if(x>y) swap(x,y);
for(int l=1,r;l<=x;l=r+1)
{
r=min(x/(x/l),y/(y/l));
ans+=(g[x/l]*g[y/l])*(mu[r]-mu[l-1]);
}
printf("%lld\n",ans);
}
}

3994: [SDOI2015]约数个数和的更多相关文章

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

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

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

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

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

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

  4. 【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} ...

  5. BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]

    2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...

  6. 【刷题】BZOJ 3994 [SDOI2015]约数个数和

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

  7. ●BZOJ 3994 [SDOI2015]约数个数和

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3994 题解: 莫比乌斯反演 (先定义这样一个符号[x],如果x为true,则[x]=1,否则 ...

  8. bzoj 3994 [SDOI2015]约数个数和——反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3994 \( d(i*j)=\sum\limits_{x|i}\sum\limits_{y|j ...

  9. BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演

    https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...

随机推荐

  1. VIM命令图解

    右键在新窗口打开查看大图 删除所有:dG 来源见水印

  2. Mac Supervisor 管理进程

    无论是在日常工作中还是平时玩代码中,我总是离不开 Supervisor,其实很久之前我就写过一篇文章:supervisord 部署 Flask,在里面,我仔细讲解了如何在 Linux 环境下安装并且配 ...

  3. 修改input被选中的默认样式

    input:focus{    outline: none;     border: 1px solid #fff; } 或者 input[type=text]:focus{   outline: n ...

  4. [h5+api]移动app开发用到的微信好友,朋友圈,qq好友,新浪微博分享合集

    适用H5+环境,能够使用plus方法的移动app中 /** * Created by HBuilder. * User: tyx * Date: 2018-11-21 * Time: 17:28:51 ...

  5. ASP.NET MVC 简单分页代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. css伪类和伪元素的区别,:before和::before的区别

    伪类用于选择DOM树之外的信息,或是不能用简单选择器进行表示的信息.前者包含那些匹配指定状态的元素,比如:visited,:active:后者包含那些满足一定逻辑条件的DOM树中的元素,比如:firs ...

  7. GitHub已将持续集成服务器Janky开源

    GitHub已将Janky开源,这是他们构建在Jenkins之上的持续集成服务器,并在其中增加了聊天自动化工具Hubot. 除了一般的Jenkins功能之外,Janky还通过Hubot对功能进行了补充 ...

  8. Android批量打包提速 - 1分钟900个市场不是梦

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4152323.html 黎明前的黑暗 使用Ant或者Gradl ...

  9. mybatis 一对一 映射实体类、嵌套查询

    一对一 在SysUser 类中增加SysRole字段.1.sql语句将role.role_name映射到role.roleName上. 2.还可以在XML 映射文件中配置结果映射.<result ...

  10. Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板)

    Axure中移动端原型设计方法(附IPhoneX和IPhone8最新模板) 2018年4月16日luodonggan Axure中基于设备模板的移动端原型设计方法(附IPhoneX和IPhone8最新 ...