P2303 [SDOI2012] Longge(数论/欧拉函数)

P2303 [SDOI2012] Longge

一道看似非常基础的数论题,但是蕴含了非常多的知识,求解
∑ i = 1 n g c d ( i , n ) \sum_{i=1}^ngcd(i,n) i=1ngcd(i,n)
这个东西我们轻松地就能化简成 i d ∗ φ id*\varphi idφ的形式,然后考虑如何快速求解,那么可以枚举n的所有因数然后对因数 O ( n ) O(\sqrt{n}) O(n )求解 φ ( n ) \varphi(n) φ(n)然后考虑这样子的复杂度和因数个数有关,那么有这样一个表告诉我们因数个数是很少的,所以这道题的复杂度是正确的。

然后进一步优化复杂度的思路就是将 φ \varphi φ展开
∑ d ∣ n φ ( d ) n d = ∑ d ∣ n d ( ∏ x ∣ d x − 1 x ) n d = n ∏ ( 1 + p i a i − 1 a i ) = n ∏ p i a i − p i + a i a i \sum_{d|n}\varphi(d)\frac{n}{d}=\sum_{d|n}d(\prod_{x|d}\frac{x-1}{x})\frac{n}{d} \\=n\prod(1+p_i\frac{a_i-1}{a_i}) \\=n\prod\frac{p_ia_i-p_i+a_i}{a_i} dnφ(d)dn=dnd(xdxx1)dn=n(1+piaiai1)=naipiaipi+ai
这样我们就可以 O ( n ) O(\sqrt{n}) O(n )解决这个问题了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值