• ZROJ 1267 我要打数论


    ZROJ 1267 我要打数论

    这个题目来源是一个同学开麦对线,说我要打麻将我要打扑克

    应clb要求题目不能直接放出来,但是真的感觉太棒了学到许多所以总结一下

    分析一波,取min可以转化

    [sum^n_{i=1}sum^n_{j=1}min(n,lcm(i,j)+gcd(i,j)) ]

    [=sum_k^nsum^n_{i=1}sum^n_{j=1}[kleq lcm(i,j)+gcd(i,j)] ]

    这是一种常见的min转换方法(我并不知道

    继续转化,

    [=sum_k^n n^2-sum^n_{i=1}sum^n_{j=1}[k> lcm(i,j)+gcd(i,j)] ]

    [=sum_k^n n^2-sum^{k}_{i=1}sum^{k}_{j=1}[k> lcm(i,j)+gcd(i,j)] ]

    大于有更好的性质,后面的式子上界为k-1,后面就只和k有关了,令其为(F(n)),即

    [F(n)=sum_isum_j [n>lcm(i,j)+gcd(i,j)] ]

    考虑一个差分,(G(n)=F(n+1)-F(n)),小于n+1又大于等于n,只能等于n

    [G(n)=sum_isum_j [lcm(i,j)+gcd(i,j)=n] ]

    考虑枚举(d=gcd(i,j))

    [=sum_g^n sum_i^{leftlfloorfrac{n}{g} ight floor}sum_j^{leftlfloorfrac{n}{g} ight floor}[ijg+g=n][gcd(i,j)=1] ]

    因为(n=ijg+g),则有解的话(g|n),所以

    [=sum_{g|n} sum_i^{leftlfloorfrac{n}{g} ight floor}sum_j^{leftlfloorfrac{n}{g} ight floor}[ijg+g=n][gcd(i,j)=1] ]

    其中(ijg+g=n),则 (i=frac{frac{n}{g}-1} j) ,枚举i,式子就变成了

    [=sum_{g|n} sum_{i|frac{n}{g}-1}[gcd(i,frac{frac{n}{g}-1} i)=1] ]

    发现式子只和(frac n g -1)有关了,则令(H(n)=sum_{i|n} [gcd(i,n/i)=1]) (禁止套娃!

    这个东西就等于(2^{w(n)}),因为每种因子都要取完,就可以当成01分析

    然后就做完了。。。总复杂度(O(T+nlog n))

    代码就不贴了

  • 相关阅读:
    npm 设置淘宝镜像
    JS字符串首字母大写
    类与面向对象基础(三)
    (转)php简单工厂模式实例讲解
    类与面向对象基础(二)
    类与面向对象基础(一)
    php连接数据库
    php中使用指针进行函数操作
    PHP基础之数组
    PHP正则表达式
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/12271297.html
Copyright © 2020-2023  润新知