DestinHistoire

 

BZOJ-2820 YY的GCD(莫比乌斯反演)

题目描述

  计算:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)\in \mathbb{Prime}] \]

  数据范围:\(T=10^4,1\leq n,m\leq 10^7\)

分析

\[\begin{aligned}&\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)\in \mathbb{Prime}]\\=&\sum_{k=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=k](k\in\mathbb{Prime})\\=&\sum_{k=1}^{n}\sum_{i=1}^{\frac{n}{k}}\sum_{j=1}^{\frac{m}{k}}[\gcd(i,j)=1](k\in\mathbb{Prime})\\=&\sum_{k=1}^{n}\sum_{i=1}^{\frac{n}{k}}\sum_{j=1}^{\frac{m}{k}}\sum_{d\mid \gcd(i,j)}\mu(d)(k\in\mathbb{Prime})\\=&\sum_{k=1}^{n}\sum_{d=1}^{\frac{n}{k}}\mu(d)\Big\lfloor\frac{n}{kd}\Big\rfloor\Big\lfloor\frac{m}{kd}\Big\rfloor(k\in \mathbb{Prime})\end{aligned} \]

  设 \(x=kd\),有:

\[=\sum_{k=1}^{n}\sum_{d=1}^{\frac{n}{k}}\mu(d)\Big\lfloor\frac{n}{x}\Big\rfloor\Big\lfloor\frac{m}{x}\Big\rfloor(k\in \mathbb{Prime}) \]

  枚举 \(x\),提到前面去:

\[=\sum_{x=1}^{n}\Big\lfloor\frac{n}{x}\Big\rfloor\Big\lfloor\frac{m}{x}\Big\rfloor\sum_{k\mid x,k\in\mathbb{Prime}}\mu(\frac{x}{k}) \]

  右边可以预处理,对于每一个质数 \(k\),所有 \(k\) 的倍数 \(x\),值都加上 \(\mu(\frac{x}{k})\)

代码

using namespace std;
const int N=1e7+10;
long long sum[N+10];
bool vis[N+10];
int prime[N+10],mu[N+10],g[N+10],cnt;
void init()
{
    mu[1]=1;
    for(int i=2;i<=N;i++)
    {
        if(!vis[i])
        {
            prime[++cnt]=i;
            mu[i]=-1;
        }
        for(int j=1;j<=cnt&&i*prime[j]<=N;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j]==0)
                break;
            else
                mu[i*prime[j]]=-mu[i];
        }
    }
    for(int j=1;j<=cnt;j++)
        for(int i=1;i*prime[j]<=N;i++)
            g[i*prime[j]]+=mu[i];
    for(int i=1;i<=N;i++)
        sum[i]=sum[i-1]+1ll*g[i];
}
int main()
{
    init();
    int T;
    cin>>T;
    while(T--)
    {
        int n,m;
        scanf("%d %d",&n,&m);
        if(n>m)
            swap(n,m);
        long long ans=0;
        for(int l=1,r;l<=n;l=r+1)
        {
            r=min(n/(n/l),m/(m/l));
            ans=ans+1ll*(n/l)*(m/l)*(sum[r]-sum[l-1]);
        }
        printf("%lld\n",ans);
    }
    return 0;
}

posted on 2020-11-17 14:32  DestinHistoire  阅读(54)  评论(0)    收藏  举报

导航