洛谷P3327 - [SDOI2015]约数个数和
Description
共\(T(T\leq5\times10^4)\)组数据。给出\(n,m(n,m\leq5\times10^4)\),求$$\sum_{i=1}n\sum_{j=1}m\sigma_0(ij)$$
Solution
首先有结论:\(\sigma_0(xy)=\sum_{d_1|x}\sum_{d_2|y}[gcd(d_1,d_2)=1]\)。下面先证明一下这个结论。
将\(x,y\)分解质因数,得到\(x=\prod_{i=1}^kp_i^{a_i}\),\(y=\prod_{i=1}^kp_i^{b_i}\)。那么若\(gcd(d_1,d
_2)=1\),则说明对于一个质因数\(p_i\),其只存在于\(d_1,d_2\)之中的零或一个中。若存在于\(d_1\)中则有\(a_i\)种可能性,若存在于\(d_2\)中则有\(b_i\)种可能性,再加上都不存在的一种共计\(a_i+b_i+1\)种。那么共有\(\prod_{i=1}^k(a_i+b_i+1)\)对互质的\((d_1,d_2)\),而这个数恰等于\(\sigma_0(xy)\)。
于是就可以正常推导啦。
ans &= \sum_{i=1}^n \sum_{j=1}^m \sum_{d_1|i} \sum_{d_2|j}[gcd(d_1,d_2)=1] \\
&= \sum_{d_1=1}^{+∞} \sum_{d_2=1}^{+∞} \sum_{d_1|i}^n \sum_{d_2|j}^m [gcd(d_1,d_2)=1] \\
&= \sum_{d_1=1}^{+∞} \sum_{d_2=1}^{+∞} ⌊\frac{n}{d_1}⌋ ⌊\frac{m}{d_2}⌋ \sum_{d_3|gcd(d_1,d_2)} \mu(d_3) \\
&= \sum_{d_3=1}^{+∞} \mu(d_3) \sum_{d_3|d_1} \sum_{d_3|d_2} ⌊\frac{n}{d_1}⌋ ⌊\frac{m}{d_2}⌋ \\
&= \sum_{d_3=1}^{+∞} \mu(d_3) \sum_{t_1=1}^{+∞} ⌊\frac{⌊\frac{n}{d_3}⌋}{t_1}⌋ \sum_{t_2=1}^{+∞} ⌊\frac{⌊\frac{m}{d_3}⌋}{t_2}⌋ \\
\end{align*}$$ $O(n\sqrt n)$预处理出$f(x)=\sum_{i=1}^x ⌊\dfrac{x}{i}⌋$,就有$$ans=\sum_{d=1}^{+∞} \mu(d)f(⌊\dfrac{n}{d}⌋)f(⌊\dfrac{m}{d}⌋)$$ 就可以在$O(\sqrt n)$的时间内求解啦。
##Code
```cpp
//[SDOI2015]约数个数和
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long lint;
inline char gc()
{
    static char now[1<<16],*s,*t;
    if(s==t) {t=(s=now)+fread(now,1,1<<16,stdin); if(s==t) return EOF;}
    return *s++;
}
inline int read()
{
    int x=0; char ch=gc();
    while(ch<'0'||'9'<ch) ch=gc();
    while('0'<=ch&&ch<='9') x=x*10+ch-'0',ch=gc();
    return x;
}
const int N=5e4+10;
int pCnt,pr[N]; bool pNot[N];
int mu[N],pre[N]; int f[N];
void init(int n)
{
    mu[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(!pNot[i]) pr[++pCnt]=i,mu[i]=-1;
        for(int j=1;j<=pCnt;j++)
        {
            int x=i*pr[j]; if(x>n) break;
            pNot[x]=true;
            if(i%pr[j]) mu[x]=-mu[i];
            else {mu[x]=0; break;}
        }
    }
    for(int i=1;i<=n;i++) pre[i]=pre[i-1]+mu[i];
    for(int x=1;x<=n;x++)
        for(int L=1,R;L<=x;L=R+1)
        {
            int v=x/L; R=x/v;
            f[x]+=(R-L+1)*v;
        }
}
int main()
{
    int task=read(); init(5e4);
    while(task--)
    {
        int n=read(),m=read();
        if(n>m) swap(n,m);
        lint ans=0;
        for(int L=1,R;L<=n;L=R+1)
        {
            int v1=n/L,v2=m/L; R=min(n/v1,m/v2);
            ans+=1LL*(pre[R]-pre[L-1])*f[v1]*f[v2];
        }
        printf("%lld\n",ans);
    }
    return 0;
}
```\]
洛谷P3327 - [SDOI2015]约数个数和的更多相关文章
- 洛谷 P3327 [SDOI2015]约数个数和 || Number Challenge Codeforces - 235E
		
https://www.luogu.org/problemnew/show/P3327 不会做. 去搜题解...为什么题解都用了一个奇怪的公式?太奇怪了啊... 公式是这样的: $d(xy)=\sum ...
 - 洛谷P3327 [SDOI2015]约数个数和  【莫比乌斯反演】
		
题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...
 - 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
		
题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N∑j=1Md(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...
 - 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)
		
传送门 公式太长了……我就直接抄一下这位大佬好了……实在懒得打了 首先据说$d(ij)$有个性质$$d(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]$$ 我们所求的答案为$ ...
 - LOJ #2185 / 洛谷 P3329 - [SDOI2015]约数个数和(莫比乌斯函数)
		
LOJ 题面传送门 / 洛谷题面传送门 题意: 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\),\(d(x)\) 为 \(x\) 的约数个数. \( ...
 - P3327 [SDOI2015]约数个数和 莫比乌斯反演
		
P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...
 - Luogu P3327 [SDOI2015]约数个数和
		
又是恶心的莫比乌斯反演,蒟蒻我又是一脸懵逼的被CXR dalao狂虐. 题目要求\(ans=\sum_{i=1}^n \sum_{j=1}^m d(ij)\),其中\(d(ij)\)表示数\(x\)的 ...
 - 并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和
		
题目大意 设d(x)为x的约数个数,\(t\)组询问,给定\(n,m\)(\(t,m,n\leq5*10^4\)),求$ \sum^n_{i=1}\sum^m_{j=1}d(i*j)$ 题解 假设\( ...
 - luogu P3327 [SDOI2015]约数个数和 莫比乌斯反演
		
题面 我的做法基于以下两个公式: \[[n=1]=\sum_{d|n}\mu(d)\] \[\sigma_0(i*j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\] 其中\(\ ...
 
随机推荐
- 【读书笔记】构建之法(CH4~CH6)
			
从chapter4至chapter6,围绕着构建过程的合作讨论构建之法,而合作与个人工作的区别却以一个微妙的问题为开端:阅读别人的代码有多难? 两人合作:(驾驶员与领航员) 合作要注意代码风格规范与设 ...
 - Yii2.0 Cookies机制和使用方法
			
在实际的项目开发过程中,用到了Yii2.0 Cookies机制!但是遇到一个十分奇葩的问题,同一个YII框架,backend下Cookies能够正常存储于客户端,但是frontend始终不行.文章的最 ...
 - 包含日志文件getshell
			
包含日志文件getshell 一.包含日志文件漏洞利用概述 当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件. ...
 - 分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型
			
这张图每位程序员应该都深有感触. 人民心目中的程序员是这样的:坐在电脑面前噼里啪啦敲着键盘,运键如飞. 现实中程序员是这样的:编码5分钟,调试两小时. 今天我要给大家分享一个用WebGL开发的网站,感 ...
 - python_112_断言
			
#断言 如果满足断言的执行程序,如果不满足则抛错误 assert type(1) is int print('断言正确的话,就继续执行') # assert type('a') is int #Ass ...
 - 引入了junit为什么还是用不了@Test注解
			
pom文件明明引入了unit,为什么还是用不了@Test? 配置如下: <dependency> <groupId>junit</groupId> <arti ...
 - Bootstrap 网格系统(Grid System)实例1
			
Bootstrap 网格系统(Grid System)实例:堆叠水平 <!DOCTYPE html><html><head><meta http-equiv= ...
 - 使用Spring AOP实现业务依赖解耦
			
Spring IOC用于解决对象依赖之间的解耦,而Spring AOP则用于解决业务依赖之间的解耦: 统一在一个地方定义[通用功能],通过声明的方式定义这些通用的功能以何种[方式][织入]到某些[特定 ...
 - [LUOGU] P2196 挖地雷
			
题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任一处 ...
 - curl学习笔记(以php为例)
			
一.demo,抓取百度页码代码: $url = 'https://www.baidu.com/'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RE ...