【笔记篇】不普及向——莫比乌斯反演学习笔记 && 栗题HAOI2011 Problem B
Part0 广告(当然没有广告费)
P.S. 这篇文章是边学着边用Typora写的...学完了题A了blog也就呼之欲出了~有latex化式子也非常方便...非常建议喜欢Markdown的dalao们下载个~
Part1 莫比乌斯函数&&莫比乌斯反演
最近一直在做数论不是OvO
然后就一直有莫比乌斯反演这个坑没有填OvO
其实PoPoQQQ的课件已经看过不少遍了OvO
但是数论这东西不动手化式子还是不行的OvO
或许是我菜?
对于两个函数\(F(x)\)和\(f(x)\), 如果它们满足
\]
那么就有
\]
这个\(\mu(x)\)指的是莫比乌斯函数...是个积性函数, 可以线筛的那种...
线筛求莫比乌斯函数的代码:
void euler(int n){
mu[1]=1; notp[1]=1;
for(int i=2;i<=n;++i){
if(!notp[i]) prime[++tot]=i,mu[i]=-1;
for(int j=1;j<=tot&&i*prime[j]<=n;++j){
notp[i*prime[j]]=1;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
break;
}else mu[i*prime[j]]=-mu[i];
}
}
}
PoPoQQQ的课件其实讲的已经非常好了, 然后再自己动手化化式子体会一下就比较好了~
Part2 HAOI2011 Problem B
题目大意: 明明题目已经写的很清楚了不是OvO
我们就先容斥一波, 把每个询问拆成四个...
令\(Q_{n,m}\)表示对于满足\(1\leq x\leq n,1\leq y\leq m\)且\(gcd(x,y)=k\)的数对\((x,y)\)的个数.
这样的话显然每次询问的答案就是\(Q_{b,d}-Q_{a-1,d}-Q_{b,c-1}+Q_{a-1,c-1}\)
那么如何求\(Q_{n,m}\)呢?(后来发现其实这就是bzoj1101不过是道权限题..
我们可以看出这个答案和\(1\leq x\leq \left\lfloor \frac{n}{k}\right \rfloor,1\leq y\leq \left\lfloor \frac{m}{k}\right \rfloor\),且\(gcd(x,y)=1\)的\((x,y)\)个数是一样的..
这样求的做法很显然单次询问就是\(O(nm)\)的,不是很懂拿什么过..所以需要进行优化.
这里就用到了莫比乌斯反演
不妨令\(f(d)\)为\(1\leq x \leq n,1\leq y\leq m\)且\(gcd(x,y)=d\)的\((x,y)\)个数,\(F(d)\)为\(1\leq x \leq n,1\leq y\leq m\)且\(d|gcd(x,y)\)的\((x,y)\)的\((x,y)\)个数..
这里不难看出\(F(x)\)和\(f(x)\)是满足
\]
这个条件的,而\(F(x)\)是比较好算的, 因为容易观察出\(F(x)=\left\lfloor \frac{n}{x}\right\rfloor\left\lfloor \frac{m}{x}\right\rfloor\)
所以就可以直接莫比乌斯反演...
\]
这样的话每次询问我们枚举\(d\)(\(k\)的倍数)就做完了...时间复杂度\(O(n)\)..好像还是过不了OvO
所以我们还要优化...显然现在能优化的地方就是预处理了...(多组询问的常见套路
那么预处理什么呢?
我们发现\(\left\lfloor\frac{n}{d}\right\rfloor\)这个东西最多只有\(2\sqrt n\)个取值(可证明的), 所以\(\left\lfloor\frac{n}{d}\right\rfloor\left\lfloor\frac{m}{d}\right\rfloor\)这个东西就有不超过\(2(\sqrt n+\sqrt m)\)个取值咯~
就可以预处理了..然后维护一个前缀和做就好了...
(据说"枚举除法的取值这种方法在莫比乌斯反演的应用当中非常的常用")
枚举的方法就是
long long calc(int n,int m){
n/=k; m/=k;
int last=0; long long ans=0;
if(n>m) swap(n,m);
for(int i=1;i<=n;i=last+1){
last=min(n/(n/i),m/(m/i));
ans+=1LL*(n/i)*(m/i)*(sum[last]-sum[i-1]);
}
return ans;
}
对就是这样咯~
代码(明明就是把上面两个函数拼起来←_←
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=50000;
int prime[N>>2],mu[N],sum[N],tot;
bool notp[N];
inline int gn(int a=0,char c=0){
for(;c<'0'||c>'9';c=getchar());
for(;c>47&&c<58;c=getchar())a=a*10+c-48;return a;
}
void euler(int n){
sum[1]=mu[1]=1; notp[1]=1;
for(int i=2;i<=n;++i){
if(!notp[i]) prime[++tot]=i,mu[i]=-1;
for(int j=1;j<=tot&&i*prime[j]<=n;++j){
notp[i*prime[j]]=1;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
break;
}else mu[i*prime[j]]=-mu[i];
}
sum[i]=sum[i-1]+mu[i];
}
}
int a,b,c,d,k;
inline LL calc(int n,int m){
int last=0; LL ans=0; n/=k; m/=k;
if(n>m) swap(n,m);
for(int i=1;i<=n;i=last+1){
last=min(n/(n/i),m/(m/i));
ans+=1LL*(n/i)*(m/i)*(sum[last]-sum[i-1]);
}
return ans;
}
int main(){
int T=gn(); euler(50000);
while(T--){
a=gn(),b=gn(),c=gn(),d=gn(),k=gn();
printf("%lld\n",calc(b,d)-calc(a-1,d)-calc(b,c-1)+calc(a-1,c-1));
}
}
注意事项?
就一条, 关于long long的问题..
5W相乘, 不开long long 只有30pts
但这个题卡常数.. 全开long long的话会压线5个点 TLE2个点什么的←_←
所以还是能不开long long就不要开long long了...
【笔记篇】不普及向——莫比乌斯反演学习笔记 && 栗题HAOI2011 Problem B的更多相关文章
- 莫比乌斯反演学习笔记+[POI2007]Zap(洛谷P3455,BZOJ1101)
先看一道例题:[POI2007]Zap BZOJ 洛谷 题目大意:$T$ 组数据,求 $\sum^n_{i=1}\sum^m_{j=1}[gcd(i,j)=k]$ $1\leq T\leq 50000 ...
- 莫比乌斯反演学习笔记(转载自An_Account大佬)
转载自An_Account大佬 提示:别用莫比乌斯反演公式,会炸的 只需要记住: [gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\ ...
- 【笔记篇】单调队列优化dp学习笔记&&luogu2569_bzoj1855股票交♂易
DP颂 DP之神 圣洁美丽 算法光芒照大地 我们怀着 崇高敬意 跪倒在DP神殿里 你的复杂 能让蒟蒻 试图入门却放弃 在你光辉 照耀下面 AC真心不容易 dp大概是最经久不衰 亘古不化的算法了吧. 而 ...
- 【学术篇】The Xuanku Inversion Magic学习笔记
退役之前写的 然后因为退役就咕咕咕了... 后来发现数学考试能用的到个鬼就发布出来了QwQ 主要是方便自己没登录的时候查阅... 显然子集什么的是没有学会的QwQ 所以学OI的话不要看本文!!!!!& ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- 【bzoj2440】【bzoj3994】莫比乌斯反演学习
哇..原来莫比乌斯代码这么短..顿时感觉逼格-- 写了这道题以后,才稍稍对莫比乌斯函数理解了一些 定理:和是定义在非负整数集合上的两个函数,并且满足条件,那么我们得到结论 在上面的公式中有一个函数,它 ...
- C#学习笔记8:HTML和CSS基础学习笔记
<!-- 1.<P>...</P>段落标签 2.<br/>折行标签. 3.<img src="" height="*px& ...
- 初学cdq分治学习笔记(可能有第二次的学习笔记)
前言骚话 本人蒟蒻,一开始看到模板题就非常的懵逼,链接,学到后面就越来越清楚了. 吐槽,cdq,超短裙分治....(尴尬) 正片开始 思想 和普通的分治,还是分而治之,但是有一点不一样的是一般的分治在 ...
随机推荐
- mysql 命令 常用操作
导出sql文件:mysqldump -h localhost -u root -p xsxj > d:\xsxj.sql 导入sql文件 MySQL> source d:/my ...
- [已解决]报错UnicodeDecodeError
输出报错: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 220: in 解决方案:将编码方式utf-8 修 ...
- 代码控制PrivateBinPath和ConfigurationFile的位置
原文:代码控制PrivateBinPath和ConfigurationFile的位置 .Net的WinForm程序有的时候让人很烦的是,在执行目录下总是一大堆的DLL,配置文件,最少则是个以下,多的时 ...
- Jmeter 请求参数中包含 MD5 加密的密码
如何在jmeter中对参数进行加密 使用工具:java+myeclipse 让开发将他的加密类从eclipse中导出来打成jar包,放在jmeter安装文件夹lib文件夹中%JMETER HOME%\ ...
- VBA+SQL transform pivot union联合查询的基础应用
Sub 项目状态查询() '如果“项目状态”是未转运营那么实施状态是不能选择的,因为还没有实施.'如果“项目状态”选择状态后,那么项目名称里面只显示该状态的项目名称.如果“项目状态”选择的不是未转运营 ...
- vue之axios的使用
一.环境安装 1.axios的安装 进入到对应工程目录执行: npm install axios 2.启动测试数据的API 测试项目地址:https://github.com/ShenJianPing ...
- Vue Router基础
路由 安装 vue-router 起步 <router-link to="/foo">Go to Foo</router-link> <router- ...
- EasyUI - 简介
1. EasyUI : 简单的界面设计框架, 基于jQuery的UI插件, 主要用来设计网站的后台管理系统 2. EasyUI使用 : 将EasyUI提供的js文件和主题(themes)样式存放到项目 ...
- ubuntu 16.04 jdk-8u201-linux-x64.tar.gz 安装部署
都是在普通用户加sudo代替root 1.sudo tar -zxvf jdk-8u201-linux-x64.tar.gz2.sudo chown make:make jdk1.8.0/3.sudo ...
- NTT数论变换
数论变换NTT 前置知识 FFT:NTT的思想和FFT一样(FFT介绍) 概述 数论变换,即NTT(Number Theory Transformation?),是基于数论域的FFT,一般我们默认FF ...