• Crash的数字表格(莫比乌斯反演)


    Crash的数字表格

    Description

    今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数。例如,LCM(6, 8) = 24。回到家后,Crash还在想着课上学的东西,为了研究最小公倍数,他画了一张N*M的表格。每个格子里写了一个数字,其中第i行第j列的那个格子里写着数为LCM(i, j)。一个4 * 5的表格如下: 1 2 3 4 5 2 2 6 4 10 3 6 3 12 15 4 4 12 4 20 看着这个表格,Crash想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当N和M很大时,Crash就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题。由于最终结果可能会很大,Crash只想知道表格里所有数的和mod 20101009的值。

    Input

    输入的第一行包含两个正整数,分别表示 (N)(M)

    Output

    输出一个正整数,表示表格中所有数的和(mod 20101009)的值。

    Sample Input

    (4 5)

    Sample Output

    (122)

    【数据规模和约定】

    100%的数据满足(N, M ≤ 10^7)

    由题可得:我们应该求的是 (sum_{i =1} ^ n sum_{j=1}^m lcm(i,j)) (不妨设 (n<=m)

    先可以由原式化简:

    (ans = sum_{i=1}^n sum_{j=1}^n frac{ij}{gcd(i,j)})

    (ans = sum_{d=1}^n sum_{i=1}^{lfloorfrac{n}{d} floor} sum_{j=1}^{lfloorfrac{m}{d} floor} [gcd(i,j)=1] ijd)

    经过最开始的基本化简以后,既然这道题和 (gcd) 有许许多多不可描述的关系,我们可以考虑莫比乌斯反演。
    既然要用莫比乌斯反演,我们就应该来构造相应的 (f(x))(F(x))

    我们设 (f(x, y, k)) 表示 (sum_{i=1}^x sum_{j=1}^y [gcd[i,j]=k] ij)

    再设 (F(x,y,t)) 表示 (sum_{i=1}^x sum_{j=1}^y [tmid gcd(i,j)]ij)

    ( herefore ans=sum_{d=1}^n d f(lfloorfrac{n}{d} floor,lfloorfrac{m}{d} floor,1))

    现在,我们来仔细观察一下 (F(x,y,t))(f(x,y,k)) 两个函数的关系

    (F(x,y,t)=sum_{tmid d} f(x,y,d))

    由莫比乌斯反演后可得:

    (f(x,y,d)=sum_{dmid t} mu(frac{t}{d}) F(x,y,t))

    (ecause d=1)

    ( herefore f(x,y,1)=sum_{t=1}^x mu(t) F(x,y,t))

    现在,我们回过头了思考一下我们上面一系列操作的意义:
    我们由题目要求推得我们需要求 (f(x,y,1))
    但是我们发现直接求并不好求,所以我们反演以后转化为去求 (F(x,y,t)) 再进一步求得 (ans)
    既然我们转化为 (F(x,y,t)) ,那么这个函数应该要比较方面我们求值才可以达到我们的要求
    所以我们来考虑一下 (F(x,y,t)) 这个函数
    仔细思考后可以发现:

    (F(x,y,t)=sum_{d=1}^x d^2 (sum_{a=1}^{lfloorfrac{x}{d} floor} a sum_{b=1}^{lfloorfrac{y}{d} floor} b))

    (sum(x,y)=sum_{a=1}^x sum_{b=1}^y ab)
    显然可以用高斯求和 (O(1)) 求得

    ( herefore F(x,y,t)=sum_{d=1}^x d^2 sum(lfloorfrac{x}{d} floor,lfloorfrac{y}{d} floor))

    那么整个分析过程就差不多完成了,综上所述:

    (ans=sum_{d=1}^n d f(lfloorfrac{n}{d} floor,lfloorfrac{m}{d} floor,1))
    我们可以分块处理 (f) ,此处可以分块 复杂度(O(sqrt{n}))

    (f(x,y,1)=sum_{t=1}^x mu(t) F(x,y,t)=sum_{t=1}^x mu(t) t^2 sum(lfloorfrac{x}{t} floor,lfloorfrac{y}{t} floor))
    我们可以 (O(1)) 预处理 (mu(t) t^2),计算 (sum)

    所以总复杂度 (O(nsqrt{n}))

    心如花木,向阳而生。
  • 相关阅读:
    SVN:cannot map the project with svn provider解决办法
    项目管理工具_maven的配置
    servlet,过滤器,监听器,拦截器的区别
    索引
    事务的隔离级别和传播行为
    jbpm工作流
    Hibernate---进度1
    java——反射
    HttpClient
    TCP和UDP并实现socket的简单通信
  • 原文地址:https://www.cnblogs.com/LLppdd/p/8424287.html
Copyright © 2020-2023  润新知