Gravatar
sxysxy
积分:2491
提交:603 / 1120
一开始没看见F(1) = 0。按一般的约数个数函数推了,后来发现了,一慌:读错题了,但是忽然想到F(1) = 0不过是把gcd == 1的贡献减去了而已。。。写一下推的过程:
设 $ D(x) = \sum_{d|x}^{ } 1 $ 也就是x的约数的个数。(与本题中F的区别就是$ D(1)=1 $)
$ \sum_{i=1}^{n} D(gcd(i, n)) = \sum_{d|n}^{ } \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} D(d) [gcd(k, \frac{n}{d}) == 1] $
$ = \sum_{d|n}^{ } D(d) * \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} [gcd(k, \frac{n}{d}) == 1] $
$ = \sum_{d|n} D(d) * \phi(\frac{n}{d})$
发现是个狄利克雷卷积的形式,我们先变换一下:(下面这个$ * $表示狄利克雷卷积运算)
$ = D * \phi$ = $ 1 * 1 * \phi$ = $ id * 1$
到这里求解就非常容易了,就是
$ = \sum_{d|n} \frac{n}{d} $
那原题里面不是D函数,而是F,区别在于$ F(1) = 0 $,怎么办
注意到原式子 $\sum_{i=1}^{n} F(gcd(i, n))$ ,我们求出来的是 $ \sum_{i=1}^{n} D(gcd(i, n))$,只有$ gcd(i, n) == 1 $ 的时候,F和D有偏差。
对于每一个$ gcd(i, n) == 1 $ ,我们都刚好多算了$ 1 $,所以最后我们答案多算了$ \phi(n) $,减去即可。
最终
$ Ans = \sum_{d|n} \frac{n}{d} - \phi(n) $
可以在$ O(\sqrt{n})$ 的时间复杂度内求解出来。

Gravatar
卜卜
积分:177
提交:33 / 71
回复 @kito :
好吧...... 看到N好大就不敢写根号

Gravatar
kito
积分:2514
提交:693 / 1285
回复 @卜卜 :
30000000还是可以承受的吧。而且出题人没造极限数据,达不到$O(\sqrt n)$

Gravatar
卜卜
积分:177
提交:33 / 71
根号算法为啥能过啊?? 这么多零一看就感觉会TLE 感觉只能用Pollard_Rho诶

Gravatar
New World
积分:766
提交:211 / 379
太轻视了,被运算顺序搞跪了
先是ans*=(x-1)/x,先算(x-1)/x,后相乘
改成ans=ans*(x-1)/x,结果先算ans*(x-1),一个大数爆unsigned long long了
怒跪

Gravatar
Go灬Fire
积分:3416
提交:1738 / 3778
回复 @Pessimist :
这个题好像不需要数组吧

Gravatar
Magic_Sheep
积分:2288
提交:647 / 1317
数组开太大会超时,不大不小,1000适合你

Gravatar
沉迷学习的假的Keller
积分:1633
提交:464 / 692
VIPEzoi 占领此题 Orz...LPX

Gravatar
Ezoi_Vermouth
积分:146
提交:42 / 121
为什么一个素数点都没有

Gravatar
Hakurou!
积分:541
提交:160 / 495
EZOI即将占领此题
LPX Orz

Gravatar
svideo
积分:919
提交:261 / 475
Ezoi 即将占领此题 Orz...LPX

Gravatar
_Itachi
积分:4324
提交:1498 / 3922
哇,读不懂题的我去问大神“因子”什么意思,才知道原来就是“因数”。。

Gravatar
Sky_miner
积分:2784
提交:902 / 1646
题解上:http://blog.csdn.net/qq_31725915/article/details/52200224

Gravatar
Sky_miner
积分:2784
提交:902 / 1646
回复 @叶子の宿敌 :
我不加^15,不加','还不是为了给你们复制粘贴着更方便吗????