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}))内解决

  • 相关阅读:
    struts-OGNL
    Linux开发环境配置大全
    Mybartis逆向工程
    开发环境配置大全
    金三银四,你的专属复习宝典
    Java5~11新特性
    Struts2+Spring+Hibernate整合开发(Maven多模块搭建)
    三层架构,Struts2,SpringMVC实现原理图
    Springmvc+Spring+Mybatis整合开发(架构搭建)
    MyBatis面试题整理
  • 原文地址:https://www.cnblogs.com/showson/p/5403443.html
Copyright © 2011-2022 走看看