这题其实没必要反演……
有 n∑i=1n∑j=1[gcd(i,j)=1]=2n∑i=1φ(i)−1,然后这题就没了……
好的,如果您看到了这里,请忽略以上内容。
首先题目要求 n∏i=1n∏j=1lcm(i,j)gcd(i,j),根据小学奥数,把 lcm 拆开,得到 n∏i=1n∏j=1ijgcd2(i,j)。
由于是乘法,可以把分子和分母拆开,那么分子部分即 n∏i=1n∏j=1ij=(n!)2n。
然后看分母。
这十分套路啊…… n∏i=1n∏j=1gcd2(i,j)=(n∏i=1n∏j=1gcd(i,j))2=(n∏d=1dn∑i=1n∑j=1[gcd(i,j)=d])2
指数更熟悉了不是吗?
这个要是不会推就别说你会莫反。
得到 (n∏d=1dn∑i=1n∑j=1[gcd(i,j)=d])2=(n∏d=1d⌊nd⌋∑i=1μ(i)(⌊nid⌋)2)2
那么我们需要预处理 n∑i=1μ(i)(⌊ni⌋)2。
本来想 O(n√n) 预处理,但是考虑到 n≤106,需要做到 O(nlogn)。
想到了什么?
观察到对于 n∈[ki,(k+1)i),有 ⌊ni⌋=k。
于是枚举倍数就可以了。
代码:
1 |
|