bzoj 2820 mobius反演
学了一晚上mobius,终于A了一道了。。。。








假设枚举到i,质数枚举到p(程序里的prime[j]),要更新A=i*p的信息。
1. p|i
这时A的素数分解式中,p这一项的次数>=2。
考虑g(A)的求和式:
如果枚举的质数p'不等于p,A/p'就也会有p这一项,次数>=2,这时候miu(A/p')=0
如果枚举的质数p'=p,A/p=i,这一项就是miu(i)
因此g(A)=miu(i)
2. p!|i (即i%p!=0)
这时候A比i多一个质因子p,对miu(i)分情况讨论。
2.1 miu(i)==0 (即i有大于1次的项)
这时A除去任何一个p'都会留下i的那个大于1次的项,除非是下面这一种非常特殊的情况:
2.1.1 i的素数分解式中,大于1次的项只有一个,且这一项为2次。记这一项为p0。
这时除去任何一个p'!=p0都会留下这一项,但是除去p0则会得到A/p0——这个数所有的项都是1次的。因此g(A)=miu(A/p0)
2.1.2 i的素数分解式大于1次的项不止一个 或者 大于1次的项唯一,但次数高于2次。易见g(A)=0
2.2 miu(i)!=0 (即i全是1次) 这个时候A的项也全是1次。设r(x)为x的质因子个数。
则可以得到g(A)=r(A)*(-1)^(r(A)-1)。因为除以任何一个p',miu(A/p')都是一样的。
同理g(i)=r(i)*(-1)^(r(i)-1),且有r(A)=r(i)+1。 利用r(A)=r(i)+1可以方便地得到:g(A)和g(i)异号,且绝对值比g(i)多1。
亦即g(A)=(g(i)>0)?-1:1 -g(i)
看情况2.1.1,我们有这么个遗留问题:
如果x的大于1次的项唯一,且这一项为2次,则令f(x)为这个项,否则f(x)=1。
事实上f(x)=1包含3种情况:
1. 大于1的项不唯一
2. 大于1次的项唯一但大于2次。
3. 全为1次
1和2利用现有的结果无法区分,但事实上不需要区分。3则可以用miu(x)判出来。
好,我们来对付f(x),仍然是线性筛,变量意义同g(x)的讨论。
1. p|i
A由i把最小因子p的次数加1得到,显然这一项的次数>=2。
1.1 f(i)!=1
1.1.1 如果f(i)=p,那么A中p的次数就是3次了,f(A)=1。
1.1.2 如果f(i)!=p,那么A中大于1次的项就不唯一了,仍有f(A)=1
因此f(i)!=1必然有f(A)=1
1.2 i全为1次 即f(i)=1且miu(i)!=0 这时显然f(A)=p
1.3 i不全为1次 即f(i)=1且miu(i)=0 这时显然f(A)=1
2. p!|i
A比i多一个1次的质因数p,那么应有f(A)=f(i)
//By BLADEVIL
var
mu, prime, mindiv, g, f :array[..] of longint;
gs :array[..] of int64;
n, m, tt :longint;
ans :int64; procedure init;
var
i, j, a :longint;
begin
mu[]:=;
for i:= to do
begin
if mindiv[i]= then
begin
inc(prime[]);
prime[prime[]]:=i;
mindiv[i]:=i;
mu[i]:=-;
f[i]:=;
g[i]:=;
end;
for j:= to prime[] do
begin
if i*prime[j]> then break;
a:=i*prime[j];
mindiv[a]:=prime[j];
if i mod prime[j]<> then
begin
mu[a]:=-mu[i];
f[a]:=f[i];
if mu[i]= then
begin
if f[i]<> then g[a]:=mu[a div f[i]] else g[a]:=;
end else
begin
if g[i]> then g[a]:=-g[i]- else g[a]:=-g[i]+;
end;
end else
begin
mu[a]:=;
if f[i]= then
if mu[i]= then f[a]:= else f[a]:=prime[j] else
f[a]:=;
g[a]:=mu[i];
break;
end;
end;
end;
for i:= to do gs[i]:=gs[i-]+g[i];
end; procedure main;
var
k, i :longint;
t, t1, t2 :longint; begin
read(tt);
for k:= to tt do
begin
read(n,m);
if n<m then
begin
t:=n; n:=m; m:=t;
end;
ans:=;
i:=;
while i<=m do
begin
t1:=n div (n div i);
t2:=m div (m div i);
if t1<t2 then t:=t1 else t:=t2;
ans:=ans+(gs[t]-gs[i-])*(n div i)*(m div i);
i:=t+;
end;
writeln(ans);
end; end; begin
init;
main;
end.
bzoj 2820 mobius反演的更多相关文章
- bzoj 2820 莫比乌斯反演
搞了一整个晚自习,只是看懂了dalao们的博客,目前感觉没有思路-.还是要多切题 next day: 刚才又推了一遍,发现顺过来了,hahaha #include<cstdio> #inc ...
- bzoj 2820 / SPOJ PGCD 莫比乌斯反演
那啥bzoj2818也是一样的,突然想起来好像拿来当周赛的练习题过,用欧拉函数写掉的. 求$(i,j)=prime$对数 \begin{eqnarray*}\sum_{i=1}^{n}\sum_{j= ...
- 【莫比乌斯反演】关于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( ...
- 莫比乌斯反演 BZOJ 2820
莫比乌斯反演真(TMD)难学.我自看了好长时间. BZOJ 2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1384 Sol ...
- Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和
下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...
- [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)
[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...
- mobius反演讲解
mobius反演的基本形式为,假设知道函数F(x)=Σf(d) d|x,那么我们可以推出f(x)=Σmiu(d)*F(x/d) d|x,另一基本形式为假设知道函数F(x)=Σf(d) x|d,那么我们 ...
- [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛
Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...
- Note -「Mobius 反演」光速入门
目录 Preface 数论函数 积性函数 Dirichlet 卷积 Dirichlet 卷积中的特殊函数 Mobius 函数 & Mobius 反演 Mobius 函数 Mobius 反演 基 ...
随机推荐
- Java测试工具和框架
个人目前只接触过JUnit以及Powermock,后续会关注更多有关测试这方面的东西 8个超实用的Java测试工具和框架_开发/数据库_IT专家网 http://database.ctocio.com ...
- 第二十一篇 json,picklz,xml模块
Json模块 Json模块比较简单,仅有四个方法dumps()和loads()方法,dump()和load()方法,但是却非常的常用,实用性极强. 如果要在不同的编程语言之间传递对象,就必须把对象序列 ...
- SPRITEKIT游戏框架之关于PHYSICS物理引擎属性
Spritekit提供了一个默认的物理模拟系统,用来模拟真实物理世界,可以使得编程者将注意力从力学碰撞和重力模拟的计算中解放出来,通过简单地代码来实现物理碰撞的模拟,而将注意力集中在更需要花费精力的地 ...
- (原)自定义资源预览工具:DZAssetPreviewPlugin(1)
@author: 白袍小道 转载请说明,谢谢 题记 后续工具制作单独作为一本(小道用的是OneNote,这样发布简单点.*--*) 总计放到写完后. 目的 1.快速预览资源(因为大部分 ...
- Android之Audio和Video
The Android platform offers built-in encoding/decoding for a variety of common media types, so that ...
- Flask 学习笔记(一)
一.Web 服务器与 Web 框架 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web ...
- 复合类型的声明——是int *p还是int* p
我们先来看一条基本类型的声明语句:int a, b, ... 即一条声明语句由一个数据类型(int)和紧随其后的一个变量名列表(a, b, ...)组成 更通用的描述是:一个基本数据类型和紧随其后的一 ...
- 简单理解DES加密算法
数据加密标准(Data Encryption Standard,DES)是当前使用最广泛的加密体制,对于任意的加密方案,总有两个输入:明文和密钥. 明文是64bits,密钥是56bits 加密过程就是 ...
- Nova Cell
Nova Cell V2 详解 现在 ,OpenStack 在控制平面上的性能瓶颈主要在 Message Queue 和 Database . 尤其是 Message Queue , 随着计算节点的增 ...
- hibernate笔记(三)
目标: 第1部分: 对象的状态: 第2部分:缓存 1) 一级缓存 2) 相关知识 ----懒加载--- 第3部分:映射 一对一映射 组件映射 继承映射 一.对象的状态 举例: User user ...