mobius反演的基本形式为,假设知道函数F(x)=Σf(d) d|x,那么我们可以推出f(x)=Σmiu(d)*F(x/d) d|x,另一基本形式为假设知道函数F(x)=Σf(d) x|d,那么我们可以推出f(x)=Σmiu(d)*F(d/x) x|d,第二种形式可以由容斥定理得出,在此不再赘述。

  我们由一个例子来了解mobius反演的作用。

  求解ans=Σ(0<i<=n)Σ(0<j<=m)1(gcd(i,j)=1)即n,m范围中互质点对儿数。

  我们设 F(x)为gcd(i,j)|x的点对儿数量,f(x)为gcd(i,j)=x的点对儿数量。那么易得F(x)=Σf(d) x|d,那么由第二形式可得f(x)=Σmiu(d)*F(d/x) x|d,那么这道题就是求f(1),即f(1)=Σmiu(d)*F(d) d<=min(n,m),比较显然的是F(x)=floor(n/d)*floor(m/d)。那么我们可以得到答案的形式

  ans=Σmiu(i)*floor(n/i)*floor(m/i)。可以O(n)的求解。

  但是对于某些问题,O(n)是无法在规定时间内完成的,我们考虑w=floor(n/i)*floor(m/i),对于i递增,w为不减的,即存在连续段w值相同。那么我们可以求出mobius函数的前缀和,然后分块的来求解,我们找到w值相同的区间,即存在j,满足floor(n/j)=floor(n/i),floor(m/j)=floor(m/i),那么j=min(floor(n/floor(n/i)),floor(m/floor(m/i))),这样对于w相同的块儿一起处理就行了,这样时间复杂度就变成了O(sqrt(n))。

  基础题bzoj 2301 http://61.187.179.132/JudgeOnline/problem.php?id=2301

这道题就是多了一个容斥定理求解,基本的思路和上面的相同,可以作为练手题。

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
a, b, c, d, k, t :longint;
ans :int64;
i :longint;
prime, miu, mindiv :array[..] of longint;
sum :array[..] of int64; procedure make;
var
i, j :longint;
begin
miu[]:=;
for i:= to do
begin
if mindiv[i]= then
begin
inc(prime[]);
prime[prime[]]:=i;
mindiv[i]:=i;
miu[i]:=-;
end;
for j:= to prime[] do
begin
if i*prime[j]> then break;
mindiv[i*prime[j]]:=prime[j];
if i mod prime[j]= then
begin
miu[i*prime[j]]:=;
break;
end else
miu[i*prime[j]]:=-miu[i];
end;
end;
for i:= to do sum[i]:=sum[i-]+miu[i];
end; function calc(n,m:longint):longint;
var
t, t1, t2 :int64;
i :longint;
xx :int64;
begin
calc:=;
i:=;
if n>m then xx:=m else xx:=n;
while i<=xx do
begin
t1:=n div (n div i);
t2:=m div (m div i);
if t1<t2 then t:=t1 else t:=t2;
calc:=calc+(sum[t]-sum[i-])*(n div i)*(m div i);
i:=t+;
end;
end; begin
make;
readln(t);
for i:= to t do
begin
readln(a,b,c,d,k);
ans:=int64(calc(b div k,d div k))
-int64(calc((c-) div k,b div k))
-int64(calc((a-) div k,d div k))
+int64(calc((a-) div k,(c-) div k));
writeln(ans);
end;
end.

mobius反演讲解的更多相关文章

  1. SPOJ PGCD (mobius反演 + 分块)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :求满足gcd(i , j)是素数(1 &l ...

  2. 关于Mobius反演

    欧拉函数 \(\varphi\) \(\varphi(n)=\)表示不超过 \(n\) 且与 \(n\) 互质的正整数的个数 \[\varphi(n)=n\cdot \prod_{i=1}^{s}(1 ...

  3. [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛

    Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...

  4. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  5. Mobius 反演与杜教筛

    积性函数 积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数. 特别地,若所有的整数 aaa ...

  6. Mobius反演学习

    这篇文章参考了许多资料和自己的理解. 先放理论基础. 最大公约数:小学学过,这里只提一些重要的公式: $·$若$a=b$,则$\gcd(a,b)=a=b$: $·$若$\gcd(a,b)=d$,则$\ ...

  7. Note -「Mobius 反演」光速入门

    目录 Preface 数论函数 积性函数 Dirichlet 卷积 Dirichlet 卷积中的特殊函数 Mobius 函数 & Mobius 反演 Mobius 函数 Mobius 反演 基 ...

  8. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  9. (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)

    莫比乌斯反演也是反演定理的一种 既然我们已经学了二项式反演定理 那莫比乌斯反演定理与二项式反演定理一样,不求甚解,只求会用 莫比乌斯反演长下面这个样子(=・ω・=) d|n,表示n能够整除d,也就是d ...

随机推荐

  1. 一次和别人争吵一个按钮,点击后显示导航;再点击不显示的效果,是否一定以及必须用js?

    事情经过是这样的,我们组一个说话很喜欢用一定,肯定的哥们,吃午饭的时候拿了自己做的一个UI库,头部有一个按钮 点击展开,再次点击收缩,他意思说一个按钮无法记录点击状态,必须使用js.然后我看了一眼,心 ...

  2. Scala学习笔记(一):环境搭建

    计算机领域的编程语言种类繁多,如C.C++.Java.C#等,我们知道的一般都是较为流行的编程语言,然有更多的是没听说过的,于是也就说不上关注或者使用了 一次在网上查资料时,无意间看到了“函数式编程” ...

  3. ABP框架插件开发

    http://personball.com/abp/2017/08/21/abp-how-to-use-plugin

  4. 给虚拟机发送键盘按键key

    使用举例:virsh send-key 11 KEY_LEFTCTRL KEY_LEFTALT KEY_DELETE作用:发送"ctrl+alt+del"给虚拟机,linux虚拟机 ...

  5. Queue模块初识

    Queue模块实现了多生产者.多消费者队列.它特别适用于信息必须在多个线程间安全地交换的多线程程序中.这个模块中的Queue类实现了所有必须的锁语义.它依赖于Python中线程支持的可用性:参见thr ...

  6. 学习bash——数据流重定向

    一.概述 1. 数据流 定义:以规定顺序被读取一次的数据序列. 分类:标准输入(stdin).标准输出(stdout)和标准错误输出(stderr). 标准输出:指的是命令执行所回传的正确信息. 标准 ...

  7. 获取JavaScript对象的方法

    写定义一个对象,如var a = new Array(),debugger,然后执行F12控制台的开发者模式下,进入断点,断点里面 会显示所有的方法的. var a = new Array(); de ...

  8. Solr的搭建和部署

    1.概述 简介 Solr,全称Search On Lucene Replication.一个开源的搜索服务器,对外提供类似于WebService的API接口. 用户可以通过http请求,向搜索引擎服务 ...

  9. [Elasticsearch] 多字段搜索 (一) - 多个及单个查询字符串

    多字段搜索(Multifield Search) 本文翻译自官方指南的Multifield Search一章. 查询很少是只拥有一个match查询子句的查询.我们经常需要对一个或者多个字段使用相同或者 ...

  10. 瀑布模型&螺旋模型

    软件开发模型:1.瀑布模型1)软件概念阶段 用户需求2)需求分析 软件需求3)架构设计 架构文档4)详细设计 模型设计5)编码阶段 代码文档6)测试阶段瀑布模型的特点是在每个阶段的工作都清晰详尽,容易 ...