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

T4:公约数

思考难度:提高?

代码难度:省选-?

算法1:暴力计算

实际得分:10

算法2:

首先gcd(ij,ik,jk)=gcd(i,j)×gcd(i,k)×gcd(j,k)gcd(i,j,k)\gcd(i\cdot j,i\cdot k,j\cdot k)=\frac{\gcd(i,j)\times \gcd(i,k)\times \gcd(j,k)}{\gcd(i,j,k)}

所以原式=i=1nj=1mk=1p(gcd2(i,j)+gcd2(i,k)+gcd2(j,k))=\sum_{i=1}^n\sum_{j=1}^m\sum_{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}^n\sum_{j=1}^m\gcd^2(i,j)=\sum_{d=1}^{\min(n,m)}\sum_{x|d}d^2\mu\left(\frac{x}{d}\right)

考虑对后面的\sum分块计算,O(n+Tnn)O(n+T\cdot n\sqrt{n})

实际得分:30

算法3:

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

实际得分:50

算法4:

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

实际得分:100

算法5:

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

实际得分:100

posted @ 2019-01-01 20:29  vercont  阅读(242)  评论(0编辑  收藏  举报