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

mac2022-06-30  95

T4:公约数

思考难度:提高?

代码难度:省选-?

算法1:暴力计算

实际得分:10

算法2:

首先gcd⁡(i⋅j,i⋅k,j⋅k)=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)}gcd(ij,ik,jk)=gcd(i,j,k)gcd(i,j)×gcd(i,k)×gcd(j,k)

所以原式=∑i=1n∑j=1m∑k=1p(gcd⁡2(i,j)+gcd⁡2(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=1mk=1p(gcd2(i,j)+gcd2(i,k)+gcd2(j,k))

考虑一个式子∑i=1n∑j=1mgcd⁡2(i,j)=∑d=1min⁡(n,m)∑x∣dd2μ(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)i=1nj=1mgcd2(i,j)=d=1min(n,m)xdd2μ(dx)

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

实际得分:30

算法3:

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

实际得分:50

算法4:

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

实际得分:100

算法5:

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

实际得分:100

转载于:https://www.cnblogs.com/vercont/p/10210017.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)