例题 P1447 [NOI2010] 能量采集
Label
利用容斥原理求最大公约数为 k k k的数对个数(或:求 ∑ i = 1 n g c d ( i , n ) \sum_{i=1}^{n}gcd(i,n) ∑i=1ngcd(i,n))
Description
Solution
首先,我们应该推得:对于某株坐标 ( x , y ) (x,y) (x,y)的植物,若 g c d ( x , y ) = d gcd(x,y)=d gcd(x,y)=d,则挡在此植物前面的植物应有 ( n − 1 ) (n-1) (n−1)株( ( x d , y d ) , ( 2 x d , 2 y d ) . . . ( ( n − 1 ) x d , ( n − 1 ) y d ) (\frac{x}{d},\frac{y}{d}),(\frac{2x}{d},\frac{2y}{d})...(\frac{(n-1)x}{d},\frac{(n-1)y}{d}) (dx,dy),(d2x,d2y)...(d(n−1)x,d(n−1)y))。
所以,设 f d = ∑ x = 1 n ∑ y = 1 m [ g c d ( x , y ) = = d ] f_d=\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x,y)==d] fd=∑x=1n∑y=1m[gcd(x,y)==d],则此题答案即为 ∑ d = 1 n ( 2 d + 1 ) f d \sum_{d=1}^{n}(2d+1)f_d ∑d=1n(2d+1)fd。
由于 x , y x,y x,y范围不一致,故此处 f f f序列无法用欧拉函数求解。
根据容斥原理,
f
d
f_d
fd代表的所有元素首先取自于公约数集合内含有
d
d
d的有序数对的集合,在此题中,这个集合的元素个数是
⌊
n
d
⌋
⌊
m
d
⌋
\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor
⌊dn⌋⌊dm⌋。之后从此集合内去掉公约数大于
d
d
d的元素,剩下的即为最大公约数为
d
d
d的有序数对。又由于若两个数的公约数为
d
d
d,那么它们的公约数显然是
d
d
d的倍数,所以我们可以得到如下求
f
d
f_d
fd的公式:
f
d
=
⌊
n
d
⌋
⌊
m
d
⌋
−
∑
i
=
2
i
d
≤
m
i
n
(
m
,
n
)
f
[
i
d
]
f_d=\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor-\sum_{i=2}^{id\leq min(m,n)}f[id]
fd=⌊dn⌋⌊dm⌋−i=2∑id≤min(m,n)f[id]
程序复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
显然,这个过程经稍微变动后可以用来解决求 ∑ i = 1 n g c d ( i , n ) \sum_{i=1}^{n}gcd(i,n) ∑i=1ngcd(i,n)的问题。
利用容斥原理推导欧拉函数表达式 φ ( n ) \varphi(n) φ(n)
我们考虑将
n
n
n改写为唯一分解定理的形式:
n
=
∏
p
i
c
i
n=\prod p_i^{c_i}
n=∏pici
考虑公式 ∣ ⋂ i = 1 n S i ∣ = ∣ U ∣ − ∣ ⋃ i = 1 n ∁ U S i ∣ |\bigcap_{i=1}^{n}S_i|=|U|-|\bigcup_{i=1}^{n}\complement_US_{i}| ∣i=1⋂nSi∣=∣U∣−∣i=1⋃n∁USi∣,只不过此处我们定义 S d i = { x ∣ d i ∤ x , x ∈ N + , x < n } ( d i 为 n 的 素 因 子 ) S_{d_i}=\{x|d_i\nmid x,x\in\N^+,x<n \}(d_i 为 n 的素因子) Sdi={x∣di∤x,x∈N+,x<n}(di为n的素因子)。
这样一来,我们便可直接导出欧拉函数任意项
φ
(
n
)
\varphi(n)
φ(n)的公式:
φ
(
n
)
=
∣
⋂
i
=
1
n
S
d
i
∣
=
∣
U
∣
−
∣
⋃
i
=
1
n
∁
U
S
d
i
∣
=
n
−
∑
i
=
1
n
(
−
1
)
i
−
1
n
∏
j
=
1
i
p
j
=
n
∏
i
=
1
k
(
1
−
1
p
i
)
\varphi(n)=|\bigcap_{i=1}^{n}S_{d_i}|=|U|-|\bigcup_{i=1}^{n}\complement_US_{d_i}|=n-\sum_{i=1}^{n}(-1)^{i-1}\frac{n}{\prod_{j=1}^{i}p_j}=n\prod_{i=1}^{k}(1-\frac{1}{p_i})
φ(n)=∣i=1⋂nSdi∣=∣U∣−∣i=1⋃n∁USdi∣=n−i=1∑n(−1)i−1∏j=1ipjn=ni=1∏k(1−pi1)