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 < ...
随机推荐
- 【MYSQL命令】查看日志是否开启及日志过期天数
show variables like 'log_%';show variables like '%expire_logs_days%'
- Redis的事物
Redis的事物 Redis 事物常用命令 multi标记一个事物块的开始 exec:执行所有事物块内的命令 discard: 取消事物,放弃执行事物块的所有命令 watch key [k ...
- MAC终端安装指定版本node
MAC终端安装指定版本node 安装brew 终端上运行 $ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Home ...
- 简述AQS原理
这是一道面试题:简述AQS原理 AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态.如果被请求的共享资源被占用,那么就需要一套线程阻塞 ...
- 75.[LeetCode] Sort Colors
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
- 《Learning scikit-learn Machine Learning in Python》chapter1
前言 由于实验原因,准备入坑 python 机器学习,而 python 机器学习常用的包就是 scikit-learn ,准备先了解一下这个工具.在这里搜了有 scikit-learn 关键字的书,找 ...
- 亚马逊CEO贝索斯致股东信:阐述公司未来计划
亚马逊CEO 杰夫·贝索斯(Jeff Bezos)今天发布年度股东信, 详细描述了亚马逊的产品.服务和未来计划,当然,信中并没有任何的硬数据,比如说亚马逊Kindle的销量等等.但这封信也包括一些颇令 ...
- python中Requests模块中https请求在设置为忽略有效性验证,屏蔽告警信息的方式
增加下面的就ok了from requests.packages.urllib3.exceptions import InsecureRequestWarningrequests.packages.ur ...
- PHP开发中常见的漏洞及防范
PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...
- win10与linux双系统切换时间不一致的调整
按照Linux系统之后再切换回到win10后,我发现win10的时间不再是北京时间,而是比北京时间多了整整8小时,之后百度找到了问题来源,这里给出解决方法. 如果安装了 Windows 和 Linux ...