3994: [SDOI2015]约数个数和

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 898  Solved: 619
[Submit][Status][Discuss]

Description

 设d(x)为x的约数个数,给定N、M,求  
 

Input

输入文件包含多组测试数据。

第一行,一个整数T,表示测试数据的组数。
接下来的T行,每行两个整数N、M。
 

Output

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

 

Sample Input

2
7 4
5 6

Sample Output

110
121

HINT

1<=N, M<=50000

1<=T<=50000

Source

Round 1 感谢yts1999上传

分析:

首先$d(x)$是一个积性函数,其次这个东西有一个很神奇的性质:

$d(nm)=\sum _{x\mid n} \sum _{y\mid m} [gcd(x,y)==1]$

证明如下:(懒得写了...公式打起来好麻烦...直接摘抄Sengxian的解释...QwQ)

于是接下来就直接莫比乌斯反演就好了...

$\sum _{x=1}^{n} \sum _{y=1}^{m} \left \lfloor \frac{n}{x} \right \rfloor \left \lfloor \frac{m}{y} \right \rfloor \sum _{d\mid x  d\mid y}\mu (d)$

$=\sum _{d=1}^{x} \mu(d) \sum _{i=1}^{\frac {n}{d}} \left \lfloor \frac{n}{id} \right \rfloor \sum _{j=1}^{\frac {m}{d}} \left \lfloor \frac{m}{jd} \right \rfloor$

现在有一个有用的公式:

$\left \lfloor \frac{n}{xy} \right \rfloor=\left \lfloor \frac{ \left \lfloor \frac{n}{x} \right \rfloor }{y} \right \rfloor$

于是乎,我们定义$f(x)=\sum _{i=1}^{x} \left \lfloor \frac{x}{i} \right \rfloor$,

那么式子就变成酱紫:

$\sum _{d=1}^{n} \mu(d) f(\left \lfloor \frac{n}{d} \right \rfloor) f(\left \lfloor \frac{m}{d} \right \rfloor)$

时间复杂度:$O(N\sqrt{N}+T\sqrt{N})$

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std; const int maxn=50000+5; int n,m,cas,cnt,mu[maxn],pri[maxn],vis[maxn];
long long ans,f[maxn]; inline long long calc(int x){
long long res=0;
for(int i=1,r;i<=x;i=r+1){
r=x/(x/i);
res+=(x/i)*(r-i+1);
}
return res;
} inline void prework(void){
mu[1]=1;
for(int i=2;i<=50000;i++){
if(!vis[i])
vis[i]=1,pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<=50000;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0){
mu[i*pri[j]]=0;break;
}
mu[i*pri[j]]=-mu[i];
}
}
for(int i=1;i<=50000;i++) mu[i]+=mu[i-1],f[i]=calc(i);
} signed main(void){
scanf("%d",&cas);prework();
while(cas--){
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);ans=0;
for(int i=1,r;i<=n;i=r+1){
r=min(n/(n/i),m/(m/i));
ans+=f[n/i]*f[m/i]*(mu[r]-mu[i-1]);
}
printf("%lld\n",ans);
}
return 0;
}

  


By NeighThorn

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

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

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

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

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

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

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

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

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

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

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

  6. BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] \(Solution\) 有结论:\[d(nm)=\sum_{i|d}\sum_{j|d ...

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

    3994: [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. 【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. ORB-SLAM 代码笔记(五)Frame类

    Frame类的成员变量主要包含从摄像头获取的图像的 1. 特征点信息(关键点+描述字) 2. 尺寸不变特征所用金字塔信息,这些都定义在ORBextractor对象中 3. 词袋模型参数,用于跟踪失败情 ...

  2. 激活Windows Server 2008R2

    1. 用管理员身份运行mini-KMS_Activator_v1.053_ENG 2. 点击倒数第二个菜单Activation Windows VL 选择数字1 下一步选择Y 不管后面报不报错 3. ...

  3. Scala function programming

    1. Arbitrary multi parameters funcs sum(1,2,3,4,5) = sum(1 to 5: _*)the equal '=' can be ignored if ...

  4. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  5. 【功能笔记】Ubuntu查看系统资源占用(内存,cpu和进程) {转载}

    转载自http://bluexp29.blog.163.com/blog/static/33858148201071534450856/ linux真是太强大了. 查看ubuntu的资源占用的命令为$ ...

  6. 每天一个Linux命令(12):su命令

    su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码. 语法: su(选项)(参数) 选项: -c<指令>或--command=<指令>:执行完指定 ...

  7. iOS-技术细节整理

    遇到未使用类,可以看看xcode->help->developer documentation 下面做一下简单的技术细节整理 Auto Layout使用Auto Layout来灵活改变UI ...

  8. POJ 2161 Chandelier(动态规划)

    Description Lamps-O-Matic company assembles very large chandeliers. A chandelier consists of multipl ...

  9. POJ 2162 Document Indexing(模拟)

    Description Andy is fond of old computers. He loves everything about them and he uses emulators of o ...

  10. 【WebService】——SOAP、WSDL和UDDI

    WebService的三要素:SOAP.WSDL和UDDI.soap用来描述传递信息的格式,wsdl描述如何访问具体的接口,uddi管理.分发查询WebService. 1.SOAP SOAP Sim ...