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


    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

  • 相关阅读:
    HttpRunner3.X
    基于C++的ByteBuf封装
    关于matlab的配色
    关于样本方差的无偏估计
    使用Python求解Nonogram
    菜鸡的一些力扣记录
    LeetCode链表练习
    C语言中的链表
    Python中的链表简介
    Nebula Graph 源码解读系列 | Vol.03 Planner 的实现
  • 原文地址:https://www.cnblogs.com/ShineEternal/p/10834259.html
Copyright © 2020-2023  润新知