zoukankan      html  css  js  c++  java
  • [bzoj2693]jzptab

    又没推出来……

    不过通过这道题还是学到好多东西呢,比如积性函数,线筛什么的。

     $sum limits _{i=1}^{n} sum limits _{j=1}^{m} lcm(i,j)$

    =$sum limits _{d=1}^{min(n,m)} sum limits _{i=1}^{left lfloor frac{n}{d} ight floor} sum limits _{j=1}^{left lfloor frac{m}{d} ight floor} i*j*d left [ gcd(i,j)=1 ight ]$

    =$sum limits _{d=1}^{min(n,m)} sum limits _{i=1}^{left lfloor frac{n}{d} ight floor} sum limits _{j=1}^{left lfloor frac{m}{d} ight floor} left ( i*j*d *sum limits _{tmid gcd(i,j)}u(t) ight )$

    =$sum limits _{d=1}^{min(n,m)} d* sum limits _{i=1}^{left lfloor frac{n}{d} ight floor} sum limits _{j=1}^{left lfloor frac{m}{d} ight floor} left ( i*j *sum limits _{tmid gcd(i,j)}u(t) ight )$

    =$sum limits _{d=1}^{min(n,m)} d* sum limits _{t=1}^{minleft ( left lfloor frac{n}{d} ight floor left lfloor frac{m}{d} ight floor ight )} u(t) * t^2 *sum limits _{i=1}^{left lfloor frac{n}{d*t} ight floor} sum limits _{j=1}^{left lfloor frac{m}{d*t} ight floor} i*j$

    自己推到这就又不会了……

    主要是没想到这玩意:$sum limits _{i} sum limits _{j} left ( i*j  ight )=  sum limits _{i} left ( i*sum limits _{j} j ight ) = left ( sum limits _{i}i ight )*left ( sum limits _{j}j ight )$

    于是原式=$sum limits _{d=1}^{min(n,m)} sum limits _{t=1}^{minleft ( left lfloor frac{n}{d} ight floor ,left lfloor frac{m}{d} ight floor ight )} u(t) * t^2 *left ( sum limits _{i=1}^{left lfloor frac{n}{d*t} ight floor}i ight ) * left ( sum limits _{j=1}^{left lfloor frac{m}{d*t} ight floor}j ight )$

    后面是一个等差数列,原式=$sum limits _{d=1}^{min(n,m)} d* left ( sum limits _{t=1}^{minleft ( left lfloor frac{n}{d} ight floor left lfloor frac{m}{d} ight floor ight )} u(t)*t^2 *frac{left lfloor frac{n}{d*t} ight floor *left ( left lfloor frac{n}{d*t} ight floor +1 ight ) * left lfloor frac{m}{d*t} ight floor left ( left lfloor frac{m}{d*t} ight floor +1 ight )}{4} ight )$

    令T=d*t,原式=$sum limits _{T=1}^{min(n,m)} frac{left lfloor frac{n}{T} ight floor * left ( left lfloor frac{m}{T} ight floor +1 ight ) * left lfloor frac{m}{T} ight floor * left ( left lfloor frac{m}{T} ight floor +1 ight )}{4} * T*sum limits _{tmid T}u(t)*t $

    到这里式子就推完了(稍恶心),之后设$f(n)=n*sum limits _{tmid n} u(t)*t$,通过一些我看不懂的证明可以发现它是积性函数,于是我们可以用线筛搞出来它,前面的部分整除分块就可以了。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #define int LL
     5 #define LL long long
     6 using namespace std;
     7 const int mod=100000009;
     8 bool noprime[12000000];
     9 int prime[12000000],cnt;
    10 int low[12000000],f[12000000],mu[12000000];
    11 void shai(int n)
    12 {
    13     f[1]=mu[1]=1;
    14     for(int i=2;i<=n;i++)
    15     {
    16         if(!noprime[i]) prime[++cnt]=i,mu[i]=-1,f[i]=-i+1+mod;
    17         for(int j=1;j<=cnt&&prime[j]*i<=n;j++)
    18         {    
    19             noprime[prime[j]*i]=1;
    20             if(i%prime[j]==0){f[i*prime[j]]=f[i];break;}
    21             f[i*prime[j]]=(f[i]*f[prime[j]])%mod;mu[i*prime[j]]=-mu[i];
    22         }
    23     }
    24     for(int i=1;i<=n;i++)f[i]=f[i]*i%mod;
    25     for(int i=1;i<=n;i++)f[i]=(f[i]+f[i-1])%mod;
    26 }
    27 LL get(LL x){return (x*(x+1)/2)%mod;}
    28 int T,n,m;
    29 signed main()
    30 {    
    31     shai(12000000);
    32     cin>>T;
    33     while(T--)
    34     {    
    35         cin>>n>>m;if(n>m)swap(n,m);
    36         LL ans=0;
    37         for(int l=1,r;l<=n;l=r+1)
    38         {    
    39             r=min(n/(n/l),m/(m/l));
    40             ans=(ans+get(n/l)*get(m/l)%mod*((f[r]-f[l-1]+mod)%mod)%mod)%mod;
    41         }
    42         printf("%lld
    ",(ans%mod+mod)%mod);
    43     }
    44 }
    View Code
  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/Al-Ca/p/11625114.html
Copyright © 2011-2022 走看看