zoukankan      html  css  js  c++  java
  • 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))

    代码就不贴了

  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/12271297.html
Copyright © 2011-2022 走看看