51nod-1222-最小公倍数计数
题意
给到 \(a,b\) ,求
\]
即最小公倍数在 \([a,b]\) 中的有序数对个数。\(a,b\le 10^{11}\) 。
分析
转化成求 \(\sum _{x}\sum _{y}[\text{lcm}(x,y)\le n]\) ,最后加上 \(x=y\) 的情况除以2即可得到有序数对的个数。减一减即可得到答案。
\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\) 。
\]
讨论求和上界。若 \(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\) ,因此右边的三个求和上界都是无效的,可以被后面的条件直接限制。
于是现在问题就变成了求
\]
注意到三个求和项是相同的,地位相等可以轮换的,不如强行给它们定序。设 \(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)\) ,它的复杂度为
\]
对于外层,复杂度为
\]
所以是一个奇妙的暴力。
代码
#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-最小公倍数计数的更多相关文章
- 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]
1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...
- [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∑bi=1∑kj ...
- 51nod 1222 最小公倍数计数【莫比乌斯反演】
参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...
- 【51nod】1222 最小公倍数计数 莫比乌斯反演+组合计数
[题意]给定a和b,求满足a<=lcm(x,y)<=b && x<y的数对(x,y)个数.a,b<=10^11. [算法]莫比乌斯反演+组合计数 [题解]★具体 ...
- 51nod 1682 中位数计数
1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均 ...
- 51nod 1238 最小公倍数之和 V3
51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...
- 51nod 1682 中位数计数(前缀和)
51nod 1682 中位数计数 思路: sum[i]表示到i为止的前缀和(比a[i]小的记为-1,相等的记为0,比a[i]大的记为1,然后求这些-1,0,1的前缀和): hash[sum[i]+N] ...
- 【51Nod 1222】最小公倍数计数
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1222 求\([a,b]\)中的个数转化为求\([1,b]\)中的个数减去 ...
- 51nod1222 最小公倍数计数
题目来源: Project Euler 基准时间限制:6 秒 空间限制:131072 KB 分值: 640 定义F(n)表示最小公倍数为n的二元组的数量. 即:如果存在两个数(二元组)X,Y(X & ...
- 51NOD 1238 最小公倍数之和 V3 [杜教筛]
1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...
随机推荐
- 20155305乔磊2016-2017-2《Java程序设计》第十周学习总结
20155305乔磊2016-2017-2<Java程序设计>第十周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. ...
- 20155305乔磊2016-2017-2《Java程序设计》第四周学习总结
20155305乔磊2016-2017-2<Java程序设计>第四周学习总结 教材学习内容总结 继承 继承就是避免多个类间重复定义共同行为. 面向对象中,子类继承父类,就是把程序中相同的代 ...
- 20155318Java课堂实践20170510
20155318Java课堂实践20170510 修改教材P98 Score2.java 让执行结果数组填充是自己的学号:提交在IDEA或命令行中运行结查截图,加上学号水印,没学号的不给成绩 代码 p ...
- ABP中module-zero快速集成微信用户认证
https://personball.com/abp/2019/01/01/introduce-abp-module-zero-external-authenticate
- 数据库sql优化总结之1-百万级数据库优化方案+案例分析
项目背景 有三张百万级数据表 知识点表(ex_subject_point)9,316条数据 试题表(ex_question_junior)2,159,519条数据 有45个字段 知识点试题关系表(ex ...
- Throwable、Error、Exception、RuntimeException的区别与联系
Throwable类是Java语言中所有错误和异常的超类.只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出.类似地,只有这个类或其子类之一可以是c ...
- .net core 2.1.3可能引发Could not load file or assembly XXXXX的错误
参考文档: https://github.com/aspnet/Home/issues/3503 写在前面 感觉自己现在干的活离开发越来越远了啊,不过也很好,每天能学到不少东西,中文的,英文的,永远也 ...
- 剑指offer-二维数组中的查找01
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- [python] Queue.Queue vs. collections.deque
https://stackoverflow.com/questions/717148/queue-queue-vs-collections-deque/717199#717199 Queue,Queu ...
- 用js两张图片合并成一张图片
JS和canvas的合成方式 function drawAndShareImage(){ var canvas = document.createElement("canvas") ...