题意

给到 \(a,b\) ,求

\[\sum _{i=a}^b\sum _x\sum _y[x\le y][\text{lcm}(x,y)=i]
\]

即最小公倍数在 \([a,b]\) 中的有序数对个数。\(a,b\le 10^{11}\) 。

分析

转化成求 \(\sum _{x}\sum _{y}[\text{lcm}(x,y)\le n]\) ,最后加上 \(x=y\) 的情况除以2即可得到有序数对的个数。减一减即可得到答案。

\[\begin{aligned}
\sum _{x=1}^n\sum _{y=1}^n[\frac{xy}{\gcd(x,y)}\le n]&=\sum _{d=1}^n\sum _{x=1}^{\lfloor\frac{n}{d}\rfloor}\sum _{y=1}^{\lfloor\frac{n}{d}\rfloor}[xyd\le n][\gcd(x,y)=1] \\
&=\sum _{d=1}^n\sum _{x=1}^{\lfloor\frac{n}{d}\rfloor}\sum _{y=1}^{\lfloor\frac{n}{d}\rfloor}[xyd\le n]\sum _{e|x,e|y}\mu (e) \\
&=\sum _{d=1}^n\sum _{e=1}^{\lfloor\frac{n}{d}\rfloor}\mu (e)\sum _{x=1}^{\lfloor\frac{n}{de}\rfloor}\sum _{y=1}^{\lfloor\frac{n}{de}\rfloor}[xyde^2\le n] \\
&=\sum _{e=1}^n\mu (e)\sum _{d=1}^{\lfloor\frac{n}{e}\rfloor}\sum _{x=1}^{\lfloor\frac{n}{de}\rfloor}\sum _{y=1}^{\lfloor\frac{n}{de}\rfloor}[xyd\le \lfloor\frac{n}{e^2}\rfloor] \\
\end{aligned}
\]

注意到后面是个 \(\lfloor\frac{n}{e^2}\rfloor\) ,所以 \(e\) 只需要枚举到 \(\sqrt n\) 。

\[ans=\sum _{e=1}^\sqrt n\mu (e)\sum _{d=1}^{\lfloor\frac{n}{e}\rfloor}\sum _{x=1}^{\lfloor\frac{n}{de}\rfloor}\sum _{y=1}^{\lfloor\frac{n}{de}\rfloor}[xyd\le \lfloor\frac{n}{e^2}\rfloor] \\
\]

讨论求和上界。若 \(d>\lfloor\frac{n}{e}\rfloor\) ,那么一定不满足 \(d\le \lfloor\frac{n}{e^2}\rfloor\) 。如果 \(x\ge \lfloor\frac{n}{de}\rfloor\) ,那么一定不可能有 \(xd\ge \lfloor\frac{n}{e^2}\rfloor\) ,因此右边的三个求和上界都是无效的,可以被后面的条件直接限制。

于是现在问题就变成了求

\[f(n)=\sum _x\sum _y\sum _z[xyz\le n]
\]

注意到三个求和项是相同的,地位相等可以轮换的,不如强行给它们定序。设 \(x\le y\le z\) ,计算完后乘上 6 即可扩展到所有排列。再讨论一下 \(x=y\le z,x\le y=z,x=y=z\) 的情况,容斥一下即可算出答案。

现在考虑如何算第一个 \(x\le y\le z\) 的情况。由于我们有了序,所以 \(x\le \sqrt [3]n\) ,只需要枚举这些 \(x\) 。枚举完 \(x\) ,剩下的有 \(y\le \sqrt \frac{n}{x}\) ,最后 \(z\) 的取值个数可以直接 \(\lfloor\frac{n}{ij}\rfloor-j+1\) 计算出来。剩下的三种情况都可以 \(O(\sqrt [3]n)\) 或 \(O(1)\) 解决,因此直接拿第一种情况来分析复杂度。

对于 \(f(n)\) ,它的复杂度为

\[\int _0^\sqrt [3]n\sqrt \frac{n}{x} dx=O(n^\frac{2}{3})
\]

对于外层,复杂度为

\[\int _1^\sqrt nf(\frac{n}{x^2})dx=O(n^{\frac{2}{3}})
\]

所以是一个奇妙的暴力。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long giant;
const int maxn=1e6+1;
bool np[maxn];
int p[maxn],ps=0;
giant mu[maxn];
giant les(giant n) {
giant fir=0,sec=0,thr=0;
for (giant i=1;i*i*i<=n;++i) {
giant ed=(giant)sqrt((long double)n/i);
for (giant j=i;j<=ed;++j) fir+=n/(i*j)-j+1;
sec+=n/(i*i)-i+1;
sec+=(giant)sqrt((long double)n/i)-i+1;
thr=i;
}
return fir*6-sec*3+thr;
}
giant calc(giant n) {
giant ret=0;
for (giant e=1,tmp;(tmp=e*e)<=n;++e)
ret+=les(n/tmp)*mu[e];
return (ret+=n)>>=1;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
mu[1]=1;
for (int i=2;i<maxn;++i) {
if (!np[i]) p[++ps]=i,mu[i]=-1;
for (int j=1,tmp;j<=ps && (tmp=i*p[j])<maxn;++j) {
np[tmp]=true;
if (i%p[j]==0) break;
mu[tmp]=-mu[i];
}
}
giant l,r;
cin>>l>>r;
giant ans=calc(r)-calc(l-1);
cout<<ans<<endl;
return 0;
}

51nod-1222-最小公倍数计数的更多相关文章

  1. 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]

    1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...

  2. [51Nod 1222] - 最小公倍数计数 (..怎么说 枚举题?)

    题面 求∑k=ab∑i=1k∑j=1i[lcm(i,j)==k]\large\sum_{k=a}^b\sum_{i=1}^k\sum_{j=1}^i[lcm(i,j)==k]k=a∑b​i=1∑k​j ...

  3. 51nod 1222 最小公倍数计数【莫比乌斯反演】

    参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...

  4. 【51nod】1222 最小公倍数计数 莫比乌斯反演+组合计数

    [题意]给定a和b,求满足a<=lcm(x,y)<=b && x<y的数对(x,y)个数.a,b<=10^11. [算法]莫比乌斯反演+组合计数 [题解]★具体 ...

  5. 51nod 1682 中位数计数

    1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均 ...

  6. 51nod 1238 最小公倍数之和 V3

    51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...

  7. 51nod 1682 中位数计数(前缀和)

    51nod 1682 中位数计数 思路: sum[i]表示到i为止的前缀和(比a[i]小的记为-1,相等的记为0,比a[i]大的记为1,然后求这些-1,0,1的前缀和): hash[sum[i]+N] ...

  8. 【51Nod 1222】最小公倍数计数

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1222 求\([a,b]\)中的个数转化为求\([1,b]\)中的个数减去 ...

  9. 51nod1222 最小公倍数计数

    题目来源: Project Euler 基准时间限制:6 秒 空间限制:131072 KB 分值: 640  定义F(n)表示最小公倍数为n的二元组的数量. 即:如果存在两个数(二元组)X,Y(X & ...

  10. 51NOD 1238 最小公倍数之和 V3 [杜教筛]

    1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...

随机推荐

  1. WPF RoutedEvent and HitTest - 简书

    原文:WPF RoutedEvent and HitTest - 简书 学习的时候切忌心浮气躁,慢慢的过每一个知识点,不要漏掉任何细节.不然当遇到细节问题的时候,会恼,会闹,会悔不该当初--花一下午调 ...

  2. [arc082F]Sandglass

    Description 传送门 Solution 这题是真的666啊... 以下是本题最关键最关键的结论:如果ai<=aj,则在某个时间t,前者的A中沙子克数(记为t(ai))一定大于等于t(a ...

  3. 【LG3241】[HNOI2015]开店

    题面 洛谷 题解 20pts 直接暴力统计即可,复杂度\(O(NQ)\). 另20pts 我们考虑动态点分治. 怎么在原树上统计答案呢,我们对点\(x\), 预处理出其子节点数目\(s_0\),其子树 ...

  4. 【LG4317】花神的数论题

    [LG4317]花神的数论题 题面 洛谷 题解 设\(f_{i,up,tmp,d}\)表示当前在第\(i\)位,是否卡上界,有\(tmp\)个一,目标是几个一的方案数 最后将所有\(d\)固定,套数位 ...

  5. java 文件过滤

    public class TestFileio { public static void main(String[] args) { File file = new File("D:/upl ...

  6. [转载]A cycle was detected in the build path of project

    解决Eclipse中Java工程间循环引用而报错的问题 如果我们的项目包含多个工程(project),而它们之间又是循环引用的关系,那么Eclipse在编译时会抛出如下一个错误信息: “A cycle ...

  7. CentOS 下 Java 的下载、安装、配置

    CentOS 下 Java 的下载.安装.配置 系统: CentOS 7 x86_64 Java 版本: 1.8.0_171 本文将 Java 目录放在 /usr/local/java 文件夹下,读者 ...

  8. .NET工程师 技能清单

    第一次写博客,先说自己对自己的职业定位.NET全栈跨语言工程师 .首先说明自己是微软的狂热粉丝,几乎所有技术都在.NET下进行. 接下来对微软目前的.NET上的技术进行进一步了解,列出一个清单或者说是 ...

  9. 使用Node.js 搭建http服务器 http-server 模块

    1. 安装 http-server 模块 npm install http-server -g   全局安装 2.在需要的文件夹   启动 http-server  默认的端口是8080    可以使 ...

  10. 对石家庄铁道大学网站UI的分析

         作为我们团队的PM,老师对我们提出了一些额外的要求,所以我发表这篇博客来谈一下对石家庄铁道大学网站UI的分析.      首先,PM 对项目所有功能的把握, 特别是UI.最差的UI, 体现了 ...