题解-SDOI2015 约数个数和
Problem
题意:设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(N,M\),求\(\sum_{i=1}^N\sum_{j=1}^Md(ij)\)
\(1\leq N,M,T\leq 5\times 10^4\)
Solution
第一次推出莫反式 ♪(∇*)
以下部分中小括号代表\(\gcd\),中括号代表取布尔值
一开始想枚举约数然后看有多少倍数出现过的,发现不好弄,转而想到 \(xy\) 的因数一定是 \(x\) 的因数和 \(y\) 的因数的积,去除冗余后可以得到 \(d(xy)=\sum_{a|x}\sum_{b|y}[(\frac xa,\frac yb)=1]=\sum_{a|x}\sum_{b|y}[(a,b)=1]\)
然后答案为:
\]
考虑优先枚举\(a,b\)
\]
发现里头那个\(\gcd\)可以套路地搞事了:
构造\(f(x)=\sum_{a=1}^N\sum_{b=1}^M[(a,b)=x]\lfloor \frac Na\rfloor \lfloor \frac Mb\rfloor\)
构造\(F(x)=\sum_{a=1}^N\sum_{b=1}^M[x|(a,b)]\lfloor \frac Na\rfloor \lfloor \frac Mb\rfloor\)
可以根据定义式得到\(F(x)=\sum_{x|n}f(n)\),经过莫比乌斯反演,得到\(f(x)=\sum_{x|n}\mu(\frac nx)F(n)\)
答案为\(f(1)=\sum_n\mu(n)F(n)\)
由于\(F(n)\)中可以将\(\gcd\)的限制条件放在前面的\(\sum\)里,所以\(F(n)=\sum_{n|a}\sum_{n|b}\lfloor \frac Na\rfloor \lfloor \frac Mb \rfloor\)
所以答案为
\]
发现后面的式子不好求,可以构造\(g(x)=\sum_{i=1}^x\lfloor \frac xi\rfloor\)
则最终的式子为
\]
分块解决即可
至于如何求\(g(x)\),可以发现其实\(g(n)=\sum_{i=1}^nd(i)\),利用线性筛完约数函数\(d(i)\)后求个前缀和即可
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline void read(int&x){
char c11=getchar();x=0;while(!isdigit(c11))c11=getchar();
while(isdigit(c11))x=x*10+c11-'0',c11=getchar();
}
const int N=50101;
int pri[N],is[N];
int u[N],g[N],d[N];
int tp;ll sm;
int main(){
g[1]=u[1]=1;
for(int i=2;i<N;++i){
if(!is[i])pri[++tp]=i,u[i]=-1,g[i]=2,d[i]=1;
for(int j=1,k;j<=tp and (k=i*pri[j])<N;++j){
is[k]=1;
if(i%pri[j])u[k]-=u[i],g[k]=g[i]*2,d[k]=1;
else {
u[k]=0,d[k]=d[i]+1;
g[k]=g[i]/(d[i]+1)*(d[i]+2);
break;
}
}
g[i]+=g[i-1],u[i]+=u[i-1];
}
int n,m,T;read(T);
while(T--){
read(n),read(m),sm=0ll;
if(n>m)swap(n,m);
for(int i=1,j;i<=n;i=j+1){
j=min(n/(n/i),m/(m/i));
sm+=1ll*(u[j]-u[i-1])*g[n/i]*g[m/i];
}printf("%lld\n",sm);
}return 0;
}
题解-SDOI2015 约数个数和的更多相关文章
- P3327/bzoj3994 [SDOI2015]约数个数和(莫比乌斯反演)
P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...
- 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)
3994: [SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...
- BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演
BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...
- 洛谷 [SDOI2015]约数个数和 解题报告
[SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...
- BZOJ 3994: [SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 898 Solved: 619[Submit][Statu ...
- 洛谷P3327 - [SDOI2015]约数个数和
Portal Description 共\(T(T\leq5\times10^4)\)组数据.给出\(n,m(n,m\leq5\times10^4)\),求\[\sum_{i=1}^n\sum_{j= ...
- P3327 [SDOI2015]约数个数和 莫比乌斯反演
P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...
- [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)
[BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...
随机推荐
- 如何计算UDP/TCP检验和checksum
如何计算UDP/TCP检验和checksum 一.下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了 ...
- HDU 1024(新最大子序列和 DP)
题意是要在一段数列中求 m 段互不重合的子数列的最大和. 动态规划,用数组 num[ ] 存储所给数列,建二维数组 dp[ ][ ] , dp[ i ][ j ] 表示当选择了第 j 个数字( num ...
- Asp.net+WebSocket+Emgucv实时人脸识别
上个月在网上看到一个用web实现简单AR效果的文章,然后自己一路折腾,最后折腾出来一个 Asp.net+WebSocket+Emgucv实时人脸识别的东西,网上也有不少相关资料,有用winform的也 ...
- python实现双向链表
双向链表 一种更复杂的链表是“双向链表”或“双面链表”.每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值:而另一个指向下一个节点,当此节点为最后一个节点时,指向空值. 实现 c ...
- Ext.net GridPanel锁定列需要注意的几个问题
1.注意需要加LockingGridView <ext:Column DataIndex="Name" Header="姓名" Width="1 ...
- 【Unity&C#】lambda函数
以下两段代码等价. 未使用lambda函数的代码: private Button PB; private void Start() { PB = GameObject.Find("PButt ...
- TypeScript 快速学习
https://learnxinyminutes.com/docs/zh-cn/typescript-cn/ https://www.tslang.cn/docs/handbook/basic-typ ...
- JVM学习(一)简介
一.java程序编译到运行大概流程 1.Source Code Files为.java文件 2.通过编译产生可执行的字节码. 3.通过jvm得到机器可以执行的机器码 4.操作系统运行机器码,并与硬件进 ...
- oracle 存储过程(包)的写法和执行
--in 代表输入参数,out 代表输出参数create or replace procedure myproc(id in int, v_message out varchar2) is--定义临时 ...
- 前段js的各种弹出框
artDialog 首页 > 文档与示例 artDialog —— 经典的网页对话框组件,内外皆用心雕琢. 支持普通与 12 方向气泡状对话框 完善的焦点处理,自动焦点附加与回退 支持 ARIA ...