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. PHP module 安装

    Part1:不重新安装php,安装zlib模块--------20171229 先安装zlib源码包 指定到目录 一台服务器,编译PHP时未设置参数,导致缺少zlib扩展,无法执行解压缩,错误信息是: ...

  2. 【转】SpringBoot系列之—瘦身部署

    一.前言 SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼: 编译出来的 Jar 包很大,如果工程引入了许多开源组件 ...

  3. [LeetCode]Flatten Binary Tree to Linked List题解(二叉树)

    Flatten Binary Tree to Linked List: Given a binary tree, flatten it to a linked list in-place. For e ...

  4. Extjs checkbox数值回显

    昨天上午花了半天时间都在调 extjs的编辑页面里的CheckBox的回显问题,一直没搞定,毕竟我接触extjs才一个月不到,属于小白.先上个图: 这就是编辑页面的时候,需要的效果.然后我代码里是用了 ...

  5. 理解clear:both属性(转)

    理解clear:both属性 在前端开发布局中,经常会被float这个属性搞晕,尤其是新手 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列.Float(浮动),往往是 ...

  6. 基于Vue实现图片在指定区域内移动

    当图片比要显示的区域大时,需要将多余的部分隐藏掉,我们可以通过绝对定位来实现,并通过动态修改图片的left值和top值从而实现图片的移动.具体实现效果如下图,如果我们移动的是div 实现思路相仿. 此 ...

  7. 浏览器根对象document之字符串属性

    1.1 停止使用的属性 fgColor.linkColor.vlinkColor.alinkColor.bgColor. 1.2 文档地址 document.URL 与documentURI属性返回同 ...

  8. Spring 框架学习—控制反转(IOC)

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-st ...

  9. android开启线程的误区

    发现一些刚学android的人,和我当初一样,对android的线程会存在着一定误区. 在android中,开启新线程时,一些人会用以下方法: new Handler().post(r); 但是这样并 ...

  10. Linux服务器安装redis数据库教程

    前面小Alan给大家说了jdk的安装,这篇跟大家聊聊redis非关系型数据库在Linux服务器的安装. redis简单介绍 REmote DIctionary Server(Redis) 是一个由Sa ...