好久没做题了,前一段时间旅游了一小会儿然后趁着 **USC 的机会溜回家开始了长达七天的暑假生活。
闲着无聊做了一下 PE-432 ……
Problem
令
S(n,m)=∑_i=1mϕ(n×i)
求 S(510510,1011)
Solution
令 n=pq ,且 p 为质数,有
S(n,m)=(p−1)S(q,m)+S(n,⌊pm⌋)
于是我们只要计算
S(1,m)=∑_i=1mϕ(i)
即可。
线性筛法可以去死了。我们可以采用 @dyh 的理性愉悦 O(n32) 的方法:
令 Sf 表示函数 f 的前缀和函数,即
Sf(n)=i=1∑nf(i),
我们要求 Sϕ(n) 。
令 gn=∑d∣nfn 于是有
S∗g(n)=∑∗i=1n∑∗d∣if(d)=∑∗i=1nSf(⌊in⌋)
这个等式只要注意到每个 f(i) 被加的次数都是 ⌊in⌋ 就好了。
如果我们能够快速计算 Sg(n) ,就可以利用
S∗f(n)=Sg(n)−∑∗i=2nSf(⌊in⌋)
来计算 Sf(n) 了。
当 f(n)=ϕ(n) 时, g(n)=∑d∣nfn=n ,Sg(n)=21n(n+1) 。我们用筛法算出 i≤n32 时的 Sf(i) ,其余的暴力记忆化递归做下去,复杂度是 O(n32) 。
我一开始把 m 看成了 1014 跑了 20min 才跑出来, m=1011 时只要 3s 就可以了……