zoukankan      html  css  js  c++  java
  • bzoj2820: YY的GCD

    • 题意
      给定(n,m(1 leqslant n,m leqslant 10000000)),求(1leqslant x leqslant n), (1 leqslant y leqslant m)(gcd(x, y))为质数的((x, y))有多少对.
      (T(leqslant 10000))组询问

    • 题解

    [ans = sum_{p in P}sum_{i=1}^{n}sum_{j=1}^{m}{[gcd(i,j)=p]} \ = sum_{p in P}sum_{i=1}^{lfloorfrac{n}{p} floor}sum_{j=1}^{lfloorfrac{m}{p} floor}{[gcd(i,j)=1]} \ = sum_{p in P}sum_{i=1}^{lfloorfrac{n}{p} floor}sum_{j=1}^{lfloorfrac{m}{p} floor}sum_{d|gcd(i,j)}mu(d) \ = sum_{p in P}sum_{i=1}^{lfloorfrac{n}{p} floor}sum_{j=1}^{lfloorfrac{m}{p} floor}sum_{d|i,d|j}mu(d) \ = sum_{p in P} sum_{d=1}^{min(n,m)} mu(d)iggllfloorfrac{n}{pd}iggr floor iggllfloorfrac{m}{pd}iggr floor \ = sum_{T}^{min(n,m)}iggllfloorfrac{n}{T}iggr floor iggllfloorfrac{m}{T}iggr floor sum_{p in P, p|T}mu(frac{T}{p})]

    令$$f(T)=sum_{p in P, p|T}mu(frac{T}{p})$$
    那么对(f(T))求前缀和则问题可以在(O(sqrt{n}))的时间内解决。
    显然(f(T))可以通过类似埃式筛法在(O(nloglog n))的时间内求出
    至此,问题在(O(nloglog n+Tsqrt{n}))内解决
    ————————————————————————————————————————
    然而(f(T))仍然可以通过线性筛得到:
    现在已知(f(x) = sum_{p'|x}mu(frac{x}{p'}))
    考虑(f(px))
    (p|x),则$$f(px) = sum_{p'|x}mu(frac{xp}{p'})$$
    显然,当(p=p')时值为(mu(x)),当(p e p')时,值为0.
    所以此时(f(px) = mu(x))
    (p ot|x),则$$f(px) = sum_{p'|x}mu(frac{xp}{p'}) + mu(x) = -f(x) + mu(x)$$
    至此,问题在(O(n+Tsqrt{n}))内解决

  • 相关阅读:
    解决FileReader读取文件乱码问题
    comparable 与 comparator
    JavaScript添加水印
    mybatis里oracle与MySQL的insert_update
    关于回车换行
    solr创建collection
    hbase相关配置说明
    java基础(十一)--- IO
    java基础(十)--- 异常
    c++中的vector原理
  • 原文地址:https://www.cnblogs.com/showson/p/5403443.html
Copyright © 2011-2022 走看看