原题

就是让你求\(\sum\limits_{i=1}\sum\limits_{j=1}d(ij)\)(其中\(d(x)\)表示\(x\)的因数个数)

首先有引理(然而并没有证明):

\(d(ij)=\sum\limits_{x|i}\sum\limits_{y|j}[gcd(x,y)=1]\)

带到原式里得到:

\(ans=\sum\limits_{i=1}\sum\limits_{j=1}\sum\limits_{x|i}\sum\limits_{y|j}[gcd(x,y)=1]\)

利用\(\mu\)函数的性质把方括号换掉:

\(ans=\sum\limits_{i=1}\sum\limits_{j=1}\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{d|gcd(x,y)}\mu(d)\)

交换枚举主体:

\(ans=\sum\limits_{x=1}\sum\limits_{y=1}\sum\limits_{i=1}^{\lfloor\frac{N}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{y}\rfloor}\sum\limits_{d|gcd(x,y)}\mu(d)\)

进而得到:

\(ans=\sum\limits_{x=1}\sum\limits_{y=1}\lfloor\frac{N}{x}\rfloor\lfloor\frac{M}{y}\rfloor\sum\limits_{d|gcd(x,y)}\mu(d)\)

首先枚举\(d\):

\(ans=\sum\limits_{d=1}^{min\{N,M\}}\mu(d)\sum\limits_{x=1}^{\lfloor\frac{N}{d}\rfloor}\sum\limits_{y=1}^{\lfloor\frac{M}{d}\rfloor}\lfloor\frac{N}{x}\rfloor\lfloor\frac{M}{y}\rfloor\)

后面的顺序是无所谓的,交换一下:

\(ans=\sum\limits_{d=1}^{min\{N,M\}}\mu(d)\sum\limits_{x=1}^{\lfloor\frac{N}{d}\rfloor}\lfloor\frac{N}{x}\rfloor\sum\limits_{y=1}^{\lfloor\frac{M}{d}\rfloor}\lfloor\frac{M}{y}\rfloor\)

然后发现只要预处理一下后面的东西就可以整除分块了

贴一下代码:

#include <bits/stdc++.h>

using namespace std;

#define N 50000

int cnt, prime[N+5], mu[N+5], sum[N+5], notprime[N+5];
int b[N+5]; void init()
{
mu[1] = sum[1] = notprime[1] = 1;
for(int i = 2; i <= N; ++i)
{
if(!notprime[i]) prime[++cnt] = i, mu[i] = -1;
for(int j = 1; j <= cnt && i*prime[j] <= N; ++j)
{
notprime[i*prime[j]] = 1;
if(i%prime[j] == 0)
{
mu[i*prime[j]] = 0;
break;
}
mu[i*prime[j]] = mu[i]*-1;
}
sum[i] = sum[i-1]+mu[i];
}
for(int i = 1; i <= N; ++i)
{
for(int l = 1, r; l <= i; l = r+1)
{
r = min(i/(i/l), i);
b[i] += (r-l+1)*(i/l);
}
}
} int T, n, m; int main()
{
scanf("%d", &T);
init();
while(T--)
{
scanf("%d%d", &n, &m);
long long ans = 0;
if(n > m) swap(n, m);
for(int l = 1, r; l <= n; l = r+1)
{
r = min(min(n/(n/l), m/(m/l)), n);
ans += 1LL*(sum[r]-sum[l-1])*b[n/l]*b[m/l];
}
printf("%lld\n", ans);
}
return 0;
}

洛谷P3327 约数个数和 结论+莫比乌斯反演的更多相关文章

  1. 【Luogu】P3327约数个数和(莫比乌斯反演+神奇数论公式)

    题目链接 真TM是神奇数论公式. 注明:如无特殊说明我们的除法都是整数除法,向下取整的那种. 首先有个定理叫$d(ij)=\sum\limits_{i|n}{}\sum\limits_{j|m}{}( ...

  2. 【BZOJ3994】约数个数和(莫比乌斯反演)

    [BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...

  3. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

    BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...

  4. 洛谷P3327 [SDOI2015]约数个数和 【莫比乌斯反演】

    题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...

  5. 洛谷$P$3327 约数个数和 $[SDOI2015]$ 莫比乌斯反演

    正解:莫比乌斯反演 解题报告: 传送门! 先考虑证明一个结论,$d_{i\cdot j}=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]$ 看起来就很对的样子,但还是证下趴$QwQ ...

  6. P3327/bzoj3994 [SDOI2015]约数个数和(莫比乌斯反演)

    P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...

  7. 洛谷 [SDOI2015]约数个数和 解题报告

    [SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...

  8. 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)

    P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...

  9. BZOJ3994:约数个数和(莫比乌斯反演:求[1,N]*[1,M]的矩阵的因子个数)

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

随机推荐

  1. Java-获取年月日对应的天干地支

    一.概述 本次是以java语言开发为例,计算出年月日对应的天干地支. 二.代码 public class MyDate { /** * 对于年月日的天干地支 */ private int year_g ...

  2. matlab中的实时音频

    音频系统工具箱™针对实时音频处理进行了优化.audioDeviceReader, audioDeviceWriter, audioPlayerRecorder, dsp.AudioFileReader ...

  3. MySQL 关于性能的参数配置梳理

    以下List是我们常见的MySQL参数配置,这个参数对提高实例的性能大有裨益. 其中 建议设置值,仅供参考,需要根据自己的业务场景和硬件资源仔细推敲. 参数 设置说明 建议设置值 lower_case ...

  4. C#之UDP通信

    简介 C#中的udp通信关键类:Udpclient,它位于命名空间System.Net.Sockets中,发送接收都是UdpClient类, 命名空间 using System.Net.Sockets ...

  5. pwnable.kr input解题记录

    pwnable input解题记录 给了源码如下: #include "stdio.h" #include "unistd.h" #include " ...

  6. 关于C#中的++运算符的一些拓展思考

    在刷LeetCode题库的时候,看到一个大神写的for循环是这样的 ;i<length;++i) { //dosomething } 其实最终的效果和 ;i<l;i++){} 是一样的. ...

  7. MATLAB中“fitgmdist”的用法及其GMM聚类算法

    MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...

  8. windows最简单的局部截图工具

    大家写博客的时候应该经常要用截图吧!不知道大家用的都是什么截图工具. 1.最开始我只会键盘的printscreen截图,然后去电脑,附件,画图....总之很多步骤,贼麻烦. 2.然后用电脑玩qq的时候 ...

  9. 移动端键盘密码输入框插件(jquery用于支付密码)

    最后生成样子: 配置值: * back {function} 回调函数 * msghtml {html} 自定义的html * title {string|object} 标题 * {txt:标题,b ...

  10. SQLserver2008一对多,多行数据显示在一行

    现在有一个需求 我们有一张表employee EmpID EmpName ---------- ------------- 张山 张大山 张小山 李菲菲 李晓梅 Result I need in th ...