类欧几里得算法:
求
∑
x
=
0
n
⌊
a
x
+
b
c
⌋
\sum_{x=0}^n\lfloor {ax+b\over c}\rfloor
∑x=0n⌊cax+b⌋
类欧几里得算法的推导
欧拉定理:
对于 ( a , m ) = 1 (a,m)=1 (a,m)=1,有 a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}\equiv1 ~(\bmod ~m) aφ(m)≡1 (mod m)
扩展欧拉定理:
对于
(
a
,
m
)
≠
1
(a,m)\neq 1
(a,m)=1,有
a
b
≡
a
min
(
b
,
b
m
o
d
φ
(
m
)
+
φ
(
m
)
)
(
m
o
d
m
)
a^b\equiv a^{\min(b,b\bmod\varphi(m)+\varphi(m))}~(\bmod~m)
ab≡amin(b,bmodφ(m)+φ(m)) (mod m)
等价的表述为对于
b
≥
φ
(
m
)
b\ge\varphi(m)
b≥φ(m),有
a
b
≡
a
b
+
φ
(
m
)
(
m
o
d
m
)
a^b\equiv a^{b+\varphi(m)}~(\bmod~m)
ab≡ab+φ(m) (mod m)
证明:
首先证明对于质数
p
p
p成立,令
m
=
s
∗
p
r
m=s*p^r
m=s∗pr,且
(
s
,
p
)
=
1
(s,p)=1
(s,p)=1,即将
m
m
m中的
p
p
p提出来。
因为
(
s
,
p
)
=
1
(s,p)=1
(s,p)=1,所以
p
φ
(
s
)
≡
1
(
m
o
d
s
)
p^{\varphi(s)}\equiv 1~(\bmod~s)
pφ(s)≡1 (mod s)
因为
φ
(
s
)
∣
φ
(
m
)
\varphi(s)|\varphi(m)
φ(s)∣φ(m),所以
p
φ
(
m
)
≡
1
(
m
o
d
s
)
p^{\varphi(m)}\equiv 1~(\bmod~s)
pφ(m)≡1 (mod s)
根据同余性质,左右以及模数同时乘以
p
r
p^r
pr,有
p
φ
(
m
)
+
r
≡
p
r
(
m
o
d
m
)
p^{\varphi(m)+r}\equiv p^r~(\bmod~m)
pφ(m)+r≡pr (mod m)
φ
(
m
)
=
φ
(
s
)
(
p
−
1
)
p
r
−
1
≥
p
r
−
1
≥
2
r
−
1
≥
r
\varphi(m)=\varphi(s)(p-1)p^{r-1}\ge p^{r-1}\ge 2^{r-1}\ge r
φ(m)=φ(s)(p−1)pr−1≥pr−1≥2r−1≥r,即
φ
(
m
)
≥
r
\varphi(m)\ge r
φ(m)≥r
所以当
b
≥
r
时
b\ge r时
b≥r时,
p
b
≡
p
φ
(
m
)
+
b
(
m
o
d
m
)
p^{b}\equiv p^{\varphi(m)+b}~(\bmod~m)
pb≡pφ(m)+b (mod m),而
r
≤
φ
(
m
)
r\le\varphi(m)
r≤φ(m),得证。
然后证明对于
p
k
p^k
pk成立:
当
b
≥
φ
(
m
)
b\ge\varphi(m)
b≥φ(m)时,
(
p
k
)
b
=
p
k
b
≡
p
k
b
+
k
φ
(
m
)
≡
(
p
k
)
b
+
φ
(
m
)
(p^k)^b=p^{kb}\equiv p^{kb+k\varphi(m)}\equiv (p^k)^{b+\varphi(m)}
(pk)b=pkb≡pkb+kφ(m)≡(pk)b+φ(m),得证。
对于任意的 a a a,将其分解为 p k p^k pk后即可得证。
例题:上帝与集合的正确用法
求 2 2 2 . . . m o d p 2^{2^{2^{...}}}\bmod p 222...modp, p ≤ 1 0 9 p\le10^9 p≤109(不一定为质数)
结论:
φ
(
φ
(
n
)
)
≤
1
2
n
\varphi(\varphi(n))\le \frac 12 n
φ(φ(n))≤21n
证明:
φ
(
n
)
=
n
∗
∏
p
i
−
1
p
i
\varphi(n)=n*\prod\frac {p_i-1}{p_i}
φ(n)=n∗∏pipi−1,如果
n
n
n为奇数,那么
φ
(
n
)
\varphi(n)
φ(n)一定为偶数;如果
n
n
n为偶数,那么
φ
(
n
)
≤
1
2
n
\varphi(n)\le \frac 12n
φ(n)≤21n。
应用拓展欧拉定理: 2 2 2 . . . ≡ 2 2 2 2 . . . m o d φ ( p ) + φ ( p ) ( m o d p ) 2^{2^{2^{...}}}\equiv2^{2^{2^{2^{...}}}\bmod~\varphi(p) ~+\varphi(p)}~(\bmod~p) 222...≡2222...mod φ(p) +φ(p) (mod p),递归,由上面的结论递归的层数为 O ( l o g p ) O(logp) O(logp)层。
中国剩余定理:
有
k
k
k个方程组:
X
≡
x
i
(
m
o
d
m
i
)
X\equiv x_i~(\bmod~m_i)
X≡xi (mod mi),
m
i
m_i
mi两两互质,求
X
X
X
令
M
=
∏
m
i
M=\prod m_i
M=∏mi,
M
i
=
M
m
i
M_i=\frac M{m_i}
Mi=miM,
M
i
−
1
M_i^{-1}
Mi−1为
M
i
M_i
Mi模
m
i
m_i
mi的逆元。
X
=
∑
i
=
1
k
x
i
∗
M
i
∗
M
i
−
1
(
m
o
d
M
)
X=\sum\limits_{i=1}^kx_i*M_i*M_i^{-1}~(\bmod~M)
X=i=1∑kxi∗Mi∗Mi−1 (mod M)
扩展中国剩余定理:
模数不一定互质,将方程依次合并:
{
x
≡
a
(
m
o
d
b
)
x
≡
c
(
m
o
d
d
)
\begin{cases}x\equiv a~(\bmod~b)\\x\equiv c~(\bmod~d)\end{cases}
{x≡a (mod b)x≡c (mod d)
可知
b
⋅
t
+
a
≡
c
(
m
o
d
d
)
b\cdot t+a\equiv c~(\bmod~d)
b⋅t+a≡c (mod d)
用
exgcd
\text{exgcd}
exgcd求出
t
≡
c
−
a
(
b
,
d
)
∗
(
b
(
b
,
d
)
)
−
1
(
m
o
d
d
(
b
,
d
)
)
t\equiv \frac {c-a}{(b,d)}*(\frac b{(b,d)})^{-1}~(\bmod~\frac {d}{(b,d)})
t≡(b,d)c−a∗((b,d)b)−1 (mod (b,d)d)
代回得
x
≡
b
⋅
t
+
a
(
m
o
d
[
b
,
d
]
)
x\equiv b\cdot t+a~(\bmod~[b,d])
x≡b⋅t+a (mod [b,d])
易验证
x
x
x满足原方程,且方程的通解为
x
+
k
[
b
,
d
]
x+k[b,d]
x+k[b,d]
两个定理都旨在求出一个特解,易发现在模数范围内只有一个解,通解形式就是特解±模数的倍数。
例题:NOI2018 屠龙勇士
例题:CF#338D GCD Table
阶:
BSGS:
多项式复合:
直接暴算
g
(
x
)
i
g(x)^i
g(x)i是
O
(
n
m
l
o
g
m
)
O(nmlogm)
O(nmlogm)的,乘系数加起来是
O
(
n
m
)
O(nm)
O(nm)的,复杂度瓶颈在算
g
(
x
)
i
g(x)^i
g(x)i。
可以预处理
g
(
x
)
,
g
(
x
)
2
,
g
(
x
)
3
.
.
.
g
(
x
)
S
g(x),g(x)^2,g(x)^3...g(x)^S
g(x),g(x)2,g(x)3...g(x)S,以及
g
(
x
)
S
,
g
(
x
)
2
S
,
.
.
.
g(x)^S,g(x)^{2S},...
g(x)S,g(x)2S,...
那么
g
(
x
)
i
+
k
S
=
g
(
x
)
i
∗
g
(
x
)
k
S
g(x)^{i+kS}=g(x)^i*g(x)^{kS}
g(x)i+kS=g(x)i∗g(x)kS
所以可以先对每块求出
∑
i
=
0
S
−
1
f
i
+
k
S
∗
g
(
x
)
i
\sum_{i=0}^{S-1}f_{i+kS}*g(x)^i
∑i=0S−1fi+kS∗g(x)i,再乘上
g
(
x
)
k
S
g(x)^{kS}
g(x)kS
复杂度
O
(
n
m
+
n
⋅
m
l
o
g
m
)
O(nm+\sqrt n\cdot mlogm)
O(nm+n⋅mlogm)。
Lucas定理:
(
n
m
)
\binom nm
(mn)中质因子
p
p
p的个数为
∑
i
⌊
n
p
i
⌋
−
⌊
m
p
i
⌋
−
⌊
n
−
m
p
i
⌋
=
p
进
制
下
m
+
(
n
−
m
)
的
进
位
次
数
\sum\limits_i \lfloor\frac n{p^i}\rfloor-\lfloor\frac m{p^i}\rfloor-\lfloor\frac {n-m}{p^i}\rfloor=p进制下m+(n-m)的进位次数
i∑⌊pin⌋−⌊pim⌋−⌊pin−m⌋=p进制下m+(n−m)的进位次数
例题:
例题2:
r
=
1
∗
2...
∗
(
p
−
1
)
∗
(
p
+
1
)
∗
(
p
+
2
)
.
.
.
∗
(
2
p
−
1
)
∗
(
2
p
+
1
)
.
.
.
∗
(
⌊
n
p
⌋
∗
p
−
1
)
∗
剩
下
部
分
r=1*2...*(p-1)*(p+1)*(p+2)...*(2p-1)*(2p+1)...*(\lfloor\frac np\rfloor*p-1)*剩下部分
r=1∗2...∗(p−1)∗(p+1)∗(p+2)...∗(2p−1)∗(2p+1)...∗(⌊pn⌋∗p−1)∗剩下部分
记
F
F
F为
r
r
r在
≤
p
k
\le p^k
≤pk部分的乘积,那么
r
=
F
⌊
n
p
k
⌋
∗
剩
下
部
分
r=F^{\lfloor\frac n{p^k}\rfloor}*剩下部分
r=F⌊pkn⌋∗剩下部分
(
n
m
)
=
r
n
∗
(
r
m
)
−
1
∗
(
r
n
−
m
)
−
1
∗
p
t
n
−
t
m
−
t
n
−
m
\binom nm=r_n*(r_m)^{-1}*(r_{n-m})^{-1}*p^{t_n-t_m-t_{n-m}}
(mn)=rn∗(rm)−1∗(rn−m)−1∗ptn−tm−tn−m
下面这两个比较懵,存疑
Stern-Brocot Tree
待更。
例题:
[
(
x
,
n
)
=
d
]
v
=
[
(
x
d
,
n
d
)
=
1
]
v
=
∑
k
∣
x
d
,
k
∣
n
d
μ
(
k
)
v
[(x,n)=d]v=[(\frac xd,\frac nd)=1]v=\sum_{k|\frac xd,k|\frac nd}\mu(k)v
[(x,n)=d]v=[(dx,dn)=1]v=∑k∣dx,k∣dnμ(k)v
直接修改
a
a
a不好修改,设辅助数组
a
i
=
∑
d
∣
i
f
(
d
)
a_i=\sum_{d|i}f(d)
ai=∑d∣if(d),则
f
(
i
)
=
∑
x
∣
i
a
(
x
)
∗
μ
(
i
x
)
f(i)=\sum_{x|i}a(x)*\mu(\frac ix)
f(i)=∑x∣ia(x)∗μ(xi)。考虑对
f
f
f进行修改,枚举
k
k
k(下面的
d
d
d是定值,
x
x
x是枚举的):
f
(
i
)
+
=
∑
x
∣
i
a
(
x
)
μ
(
i
x
)
=
∑
k
d
∣
x
∣
i
μ
(
k
)
v
μ
(
i
x
)
=
μ
(
k
)
v
∑
k
d
∣
x
∣
i
μ
(
i
x
)
f(i)+=\sum_{x|i}a(x)\mu(\frac ix) =\sum_{kd|x|i}\mu(k)v\mu(\frac ix) =\mu(k)v\sum_{kd|x|i}\mu(\frac ix)\\
f(i)+=x∣i∑a(x)μ(xi)=kd∣x∣i∑μ(k)vμ(xi)=μ(k)vkd∣x∣i∑μ(xi)
令
i
′
=
i
k
d
,
x
′
=
x
k
d
i'=\frac i{kd},x'=\frac x{kd}
i′=kdi,x′=kdx:
=
μ
(
k
)
v
∑
x
′
∣
i
′
μ
(
i
′
x
′
)
=
μ
(
k
)
v
[
i
=
=
k
d
]
=\mu(k)v\sum_{x'|i'}\mu(\frac {i'}{x'})\\=\mu(k)v[i==kd]
=μ(k)vx′∣i′∑μ(x′i′)=μ(k)v[i==kd]
所以只需要枚举
n
d
\frac nd
dn的约数
k
k
k,令
f
[
k
d
]
+
=
μ
(
k
)
v
f[kd]+=\mu(k)v
f[kd]+=μ(k)v即可。
∑
i
=
1
n
a
(
i
)
=
∑
i
=
1
n
∑
d
∣
i
f
(
d
)
=
∑
i
=
1
n
∑
d
=
1
n
i
f
(
d
)
\sum_{i=1}^na(i)=\sum_{i=1}^n\sum_{d|i}f(d)=\sum_{i=1}^n\sum_{d=1}^{\frac ni}f(d)
∑i=1na(i)=∑i=1n∑d∣if(d)=∑i=1n∑d=1inf(d)
维护
f
f
f的前缀和然后整除分块回答询问即可。
例题:
求
∑
i
=
1
n
μ
2
(
i
)
,
n
≤
1
0
18
\sum_{i=1}^n\mu^2(i),n\le10^{18}
∑i=1nμ2(i),n≤1018,即求
n
n
n以内无平方因子数的个数。
μ
2
(
i
)
=
∑
d
2
∣
i
μ
(
d
)
\mu^2(i)=\sum_{d^2|i}\mu(d)
μ2(i)=∑d2∣iμ(d)
∑
i
=
1
n
μ
2
(
i
)
=
∑
i
=
1
n
∑
d
2
∣
i
μ
(
d
)
=
∑
d
=
1
n
μ
(
d
)
⌊
n
d
2
⌋
\sum_{i=1}^n\mu^2(i)=\sum_{i=1}^n\sum_{d^2|i}\mu(d)=\sum\limits_{d=1}^{\sqrt n}\mu(d)\lfloor\frac n{d^2}\rfloor
∑i=1nμ2(i)=∑i=1n∑d2∣iμ(d)=d=1∑nμ(d)⌊d2n⌋
整除分块的复杂度是
O
(
n
1
3
)
O(n^{\frac 13})
O(n31)的,当
d
≤
n
1
3
d\le n^{\frac 13}
d≤n31时只有
n
1
3
n^{\frac 13}
n31种,当
d
>
n
1
3
d>n^{\frac 13}
d>n31时
⌊
n
d
2
⌋
<
n
1
3
\lfloor\frac n{d^2}\rfloor<n^{\frac 13}
⌊d2n⌋<n31,而杜教筛筛
μ
(
d
)
\mu(d)
μ(d)的前缀和的复杂度按照每次都跑满
O
(
n
2
3
)
O(n^{\frac 23})
O(n32)算复杂度为
O
(
n
3
7
)
O(n^{\frac 37})
O(n73)(实际比这个小)
例题三连:
51nod1222 最小公倍数计数
51Nod1220 约数之和
SPOJ DIVCNT2 - Counting Divisors