我一开始的推法跟题解都不太一样:
i=1∑nj=1∑n(ai,aj)aiaj
=d∑d1i=1∑nj=1∑naiaj[(ai,aj)=d]
=d∑d1d∣ai∑d∣aj∑aiajk∣(dai,daj)∑μ(k)
=d∑k∑d1μ(k)dk∣ai∑dk∣aj∑aiaj
令T=dk,f(T)=d∣T∑d1μ(dT),那么就变成了
T∑f(T)(T∣ai∑ai)2
f和后面的∑都可以在O(nlogn)的时间里预处理出来。
我是这样做的,实现的过程中有一个棘手的问题是需要计算d1但不取模,我就用了double
来存储中间的一些量。
结果过了样例,但是只过了一个点,后面9个点都WA了,想知道究竟是我代码有问题还是上面推式子的过程有问题呢?