3994: [SDOI2015]约数个数和
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\)的表示是没有意义的!
然后就可以开始欢乐的画柿子了
\]
\]
\]
\]
恩...

预处理一个函数\(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]约数个数和的更多相关文章
- 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)
3994: [SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...
- BZOJ 3994: [SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 898 Solved: 619[Submit][Statu ...
- [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)
[BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...
- 【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} ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- 【刷题】BZOJ 3994 [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T ...
- ●BZOJ 3994 [SDOI2015]约数个数和
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3994 题解: 莫比乌斯反演 (先定义这样一个符号[x],如果x为true,则[x]=1,否则 ...
- bzoj 3994 [SDOI2015]约数个数和——反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3994 \( d(i*j)=\sum\limits_{x|i}\sum\limits_{y|j ...
- BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...
随机推荐
- javascript中的undefined与null的区别
一.相似性 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别. var a = undefined; var a = null; 上面代码中,a变量分别被赋值 ...
- flask-login的使用3
# coding=utf-8 import flask app = flask.Flask(__name__) app.secret_key = 'super secret string' impor ...
- jQuery源码学习笔记二
//添加实例属性和方法 jQuery.fn = jQuery.prototype = { // 版本,使用方式:$().jquery弹出当前引入的jquery的版本 jquery: core_vers ...
- Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825
Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825 1. 播放系统服务器方面的维护2 1.1. 默认情况下,已经在系统的启动目录下增加了俩个启动项目2 1.2. ...
- local_listener参数的作用!
转自:http://warehouse.itpub.net/post/777/472788 pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态 ...
- ORACLE EXPDP命令使用详细
相关参数以及导出示例: 1. DIRECTORY 指定转储文件和日志文件所在的目录DIRECTORY=directory_objectDirectory_object用于指定目录对象名称.需要注意,目 ...
- canvas动画部分
requestAnimationFrame(callback) 一个用于制作逐帧动画的函数 //这个函数会在控制台无限输出"----" (function animate() { ...
- webapp开发绝对定位引发的问题
最近做了一个webapp 需求是要滑动页面翻页,我使用了大量绝对定位 当遇到输入框时,在部分手机上发现了问题.虚拟键盘收回时,整个body全部下移了,经过多次测试, 发现是fixed布局的音乐按钮造成 ...
- MySQL: OPTIMIZE TABLE: Table does not support optimize, doing recreate + analyze instead
show create table history;-------------------------- CREATE TABLE `foo` ( `itemid` bigint(20) unsig ...
- [翻译] IDMPhotoBrowser
IDMPhotoBrowser IDMPhotoBrowser is a new implementation based on MWPhotoBrowser. IDMPhotoBrowser实现了图 ...