数论出题组比赛用题:公约数

T4:公约数

思考难度:提高?

代码难度:省选-?

算法1:暴力计算

实际得分:10

算法2:

首先gcd(ij,ik,jk)=gcd(i,j)×gcd(i,k)×gcd(j,k)gcd(i,j,k)gcd(icdot j,icdot k,jcdot k)=frac{gcd(i,j) imes gcd(i,k) imes gcd(j,k)}{gcd(i,j,k)}

所以原式=i=1nj=1mk=1p(gcd2(i,j)+gcd2(i,k)+gcd2(j,k))=sum_{i=1}^nsum_{j=1}^msum_{k=1}^p(gcd^2(i,j)+gcd^2(i,k)+gcd^2(j,k))

考虑一个式子i=1nj=1mgcd2(i,j)=d=1min(n,m)xdd2μ(xd)sum_{i=1}^nsum_{j=1}^mgcd^2(i,j)=sum_{d=1}^{min(n,m)}sum_{x|d}d^2muleft(frac{x}{d} ight)

考虑对后面的sum分块计算,O(n+Tnn)O(n+Tcdot nsqrt{n})

实际得分:30

算法3:

发现前面的sum也可以分块,O(n+Tn)O(n+Tcdot n)

实际得分:50

算法4:

考虑令f(x)=x2,g(x)=μ(x)f(x)=x^2,g(x)=muleft({x} ight),计算这两个函数的狄利克雷卷积h(x)h(x),再对h(x)h(x)分块计算,O(n+Tn)O(n+Tcdot sqrt{n})

实际得分:100

算法5:

杜教筛一下,把预处理复杂度由O(n)O(n)降低为O(n23)O(n^{frac{2}{3}})我太懒了没有学杜教筛

实际得分:100

原文地址:https://www.cnblogs.com/ShineEternal/p/10834259.html