bzoj 2301(Mobius)
推出式子然后分块求和(还需使用一下容斥原理)。
分析:令f(n,m,i)表示在1<=x<=n,1<=y<=m,满足gcd(x,y)是i的(x,y)的对数。
ans=f(c,d,i)−f(a−1,d,i)−f(b,c−1,i)+f(a−1,c−1,i)其中1<=x<=n,1<=y<=m,满足gcd(x,y)是i的(x,y)的对数也等价于1<=x<=n/i,1<=y<=m/i时(x,y)互质(gcd(x,y)=1)的对数,即
f(n,m,i)=f(n/i,m/i,1)
令F(i)表示满足i|gcd(x,y)的(x,y)的对数。
可以得到一个显然的事实F(i)=⌊ni⌋⌊mi⌋。
根据莫比乌斯反演定理 (不会的可以去看看ACdreamer博客)
F(i)=∑i|df(d)=>f(i)=∑i|dμ(di)F(d)=∑i|dμ(di)⌊nd⌋⌊md⌋
后面O(√n)进行分块求和即可,此处不再赘述
/* ans=calc(b,d,k)-calc(a-1,d,k)-calc(c-1,b,k)+calc(a-1,c-1,k);
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=5e5+2;
int mu[MAXN],prime[MAXN],tot=0,a,b,c,d,k;
bool vis[MAXN];
inline void linear_shaker() {mu[1]=1;memset(vis,false,sizeof(vis));for (register int i=2;i<MAXN;++i) {if (!vis[i]) prime[++tot]=i,mu[i]=-1;for (int j=1;j<=tot&&i*prime[j]<MAXN;++j) {vis[i*prime[j]]=true;if (i%prime[j]==0) {mu[i*prime[j]]=0;break;}mu[i*prime[j]]=-mu[i];}}for (register int i=2;i<MAXN;++i) mu[i]+=mu[i-1];
}
inline int read() {int x=0;char c=getchar();while (c<'0'||c>'9') c=getchar();while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();return x;
}
inline ll cal(int n,int m) {int t=n>m?m:n,last;ll ret=0;for (int i=1;i<=t;i=last+1) {last=min(n/(n/i),m/(m/i));ret+=1ll*(mu[last]-mu[i-1])*(ll)(n/i)*(m/i);}return ret;
}
int main() {linear_shaker();int kase=read();while (kase--) {a=read(),b=read(),c=read(),d=read(),k=read();a=(a-1)/k,b/=k,c=(c-1)/k,d/=k;printf("%lld\n",cal(a,c)+cal(b,d)-cal(a,d)-cal(c,b));}return 0;
}
bzoj 2301(Mobius)相关推荐
- 莫比乌斯(Mobius)反演知识整合
前言 虽然我去年就已经学过这东西了,但是一直没有整理.归纳.而且我发现我对它的套路不够熟悉.对它的理解不够透彻,卒致GDOIDay2T1没切(详细事故记录戳这里).所以,在此做一个知识整合. 引子 先 ...
- 欧拉函数和莫比乌斯反演(Mobius)
这几天研究了之前一直困扰自己很久的莫比乌斯反演,虽然自己现在学的还不是很好,就简简单单的写一下总结吧,咦,都没学会掌握我就写总结好像很欠揍,欧拉函数现在也系统的整理一下好了 一.欧拉函数 1.定义:* ...
- 莫比乌斯进阶:bzoj 2693 jzptab(Mobius)
传送门 题解: 第四行μ(k)后还要乘一个i*j 实在看不下去以前打的巨丑的LaTex公式,于是重新打一遍顺便复习一下.(那个D=d*k的那一杠是word的输入符,请不要介意...) 最后一行括号里那 ...
- 莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
传送门 题解: 简直完美<(▰˘◡˘▰)> 对于求约数个数,可以参看这一篇blog 除了线性筛,可以O(n√n)求(网上很多博客中就是这么做的),不过有更快的方法,代码复杂度又不高,为啥不 ...
- 莫比乌斯入门:bzoj 1101 Zap(Mobius)
传送门 题解: #include<bits/stdc++.h> using namespace std; const int MAXN=50002,INF=0x3f3f3f3f; int ...
- BZOJ 1085(IDA*)
题面 传送门 分析 首先,直接搜索肯定会TLE 很容易想到用迭代加深的方法,限定搜索深度 但是,这样仍然不够,需要用启发式的方法优化 我们设计一个估价函数f(x)=g(x)+h(x)f(x)=g(x) ...
- bzoj 1664 (贪心)
[Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 487 Solved ...
- BZOJ 1207(dp)
传送门 题面: 1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4197 Solved: 2019 [Sub ...
- BZOJ1937 / BZOJ 3118(单纯形)
传送门 题解: KM?网络流建模?不存在的. 单纯形立水之. (注意对偶之后跑得更快,取反大概要慢8倍). BZOJ3118: #include <bits/stdc++.h> using ...
最新文章
- 将数据库表中数据转为XML
- EditPlus正则表达式
- 正則表達式基本元字符集及其含义(上)
- 【Groovy】Groovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )
- 织梦dedecms如何对列表添加判断语句
- 《写给大家看的设计书:实例与创意(修订版)》—1你已经知道多少了?
- 利用yum升级Centos6的gcc版本,使其支持C++11
- WCF RIA优缺点
- 毕昇 JDK:“传奇再现”华为如何打造 ARM 上最好用的 JDK?
- hht时频谱 matlab 乱序_MATLAB信号频谱分析FFT详解
- OO思想(只留做自己看理解)
- mysql queries 很大,mysql优化通常使用的几种方法
- 信息安全概论复习笔记
- html5一个可拖动的图片大小,HTML5画布中的可拖动和可调整大小元素
- html怎么在手机打不开,手机的浏览器打不开网页怎么办
- 通过xml方式根据word模板导出word
- 自我检讨书(我与电脑)
- 阿里云服务器部署(2)---配置EMQX服务器(企业版)
- 【滤波】概率、高斯和贝叶斯
- C# DataGridView控件动态添加行与列
热门文章
- [蓝桥杯]校内培训交流会总结
- 又一批大学!考研成绩延期公布!
- Linux内核编译基础
- shell-awk命令详解
- MySQL数据备份命令
- MRF.DDt(U)---MRF模型简介
- 文献阅读:Scaling Instruction-Finetuned Language Models
- python基于pingouin包进行统计分析:使用tost函数执行独立双样本双单侧检验(TOST)、以dataframe的形式输出分析结果(包含p值、自由度、bound等)
- java+ jsp+js 实现富文本编辑和上传图片功能
- 数据结构与算法2:线性表的顺序存储与链式存储