利用容斥解决欧拉函数相关问题&&[NOI2010] 能量采集

"博客介绍了如何利用容斥原理解决最大公约数为特定值的数对个数问题,以及如何推导欧拉函数的表达式。通过解析gcd(x,y)=dgcd(x,y)=dgcd(x,y)=d的情况,给出求解fdf_dfdf​的公式,并讨论了其在求∑i=1ngcd(i,n)sum_{i=1}
摘要由CSDN通过智能技术生成
例题 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

P1447 [NOI2010] 能量采集

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) (n1)株( ( 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(n1)x,d(n1)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=1ny=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 dndm。之后从此集合内去掉公约数大于 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=dndmi=2idmin(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=1nSi=Ui=1nUSi,只不过此处我们定义 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={xdix,xN+,x<n}(din)

这样一来,我们便可直接导出欧拉函数任意项 φ ( 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=1nSdi=Ui=1nUSdi=ni=1n(1)i1j=1ipjn=ni=1k(1pi1)

Code(P1447)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值