• 洛谷P2257 YY的GCD


    题目大意:给定(n,m),求

    [sumlimits_{x=1}^{n} sumlimits_{y=1}^{n} [gcd(x,y)==k] (k∈prime) ]

    莫比乌斯反演一般套路:

    (f(d))(gcd(x,y)==d)的个数,(F(d))(gcd(x,y)==k(d|k))的个数

    即:

    [f(d)=sumlimits_{i=1}^{n} sumlimits_{j=1}^{m}[gcd(i,j)==d] ]

    这一步转化可以参考上一道例题中对于(f(d))的处理

    [F(n)=sumlimits_{n|d}f(d)=lfloorfrac{N}{n} floor lfloorfrac{M}{n} floor ]

    根据第二形式的莫比乌斯反演定理:

    [f(n)=sumlimits_{n|d}mu(lfloorfrac{d}{n} floor)F(d) ]

    先把这些式子列出来,然后化简原式

    [ret=sumlimits_{p∈prime} sumlimits_{i=1}^{n} sumlimits_{j=1}^{m}[gcd(i,j)==p] ]

    [ret=sumlimits_{p∈prime} f(p) ]

    [ret=sumlimits_{p∈prime} sumlimits_{p|d}mu(lfloorfrac{d}{p} floor)F(d) ]

    然后枚举因子改为枚举倍数

    [ret=sumlimits_{p∈prime} sumlimits_{d=1}^{min(lfloorfrac{n}{p} floor,lfloorfrac{m}{p} floor)}mu(d)F(dp) ]

    (F(n))代入

    [ret=sumlimits_{p∈prime} sumlimits_{d=1}^{min(lfloorfrac{n}{p} floor,lfloorfrac{m}{p} floor)}mu(d)lfloorfrac{n}{dp} floorlfloorfrac{m}{dp} floor ]

    有一种可以降低复杂度的方法:

    (T=dp)

    [ret=sumlimits_{T=1}^{min(n,m)} sumlimits_{t|T,t∈prime}mu(lfloorfrac{T}{t} floor) lfloorfrac{n}{T} floorlfloorfrac{m}{T} floor ]

    改变一下顺序

    [ret=sumlimits_{T=1}^{min(n,m)}lfloorfrac{n}{T} floorlfloorfrac{m}{T} floor(sumlimits_{t|T,t∈prime}mu(lfloorfrac{T}{t} floor)) ]

    最后面这个(sum)可以用埃氏筛求出来

    复杂度(O(nloglogn+Tsqrt{n}))

  • 相关阅读:
    TLS回调函数
    MySQL-based databases CVE-2016-6664 本地提权
    go语文中panic的使用
    Redis实现分布式锁与任务队列的思路
    mysql添加权限权限用户
    php压缩html代码减少页面响应时间
    Docker搭建nginx+php-fpm运行环境
    vscode使用phpxdebug调试
    PHP7引用类型
    PHPFPM模式三种运行模式
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12017057.html
Copyright © 2020-2023  润新知