1 条题解

  • 0
    @ 2025-12-18 16:28:49

    问题

    给出 nn1n2×1061 \leq n \leq 2 \times 10^6),求 i=1nj=1ngcd(i,j)\sum\limits_{i=1}^n\sum\limits_{j=1}^n \gcd(i,j)

    题解

    i=1nj=1ngcd(i,j)\sum\limits_{i=1}^n\sum\limits_{j=1}^n \gcd(i,j)
    $=\sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^n d*\lbrack\gcd(i,j)=d\rbrack$
    $=\sum\limits_{d=1}^n \sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{n}{d}} d\lbrack\gcd(i,j)=1\rbrack$
    $=\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{n}{d}} \lbrack\gcd(i,j)=1\rbrack$
    $=\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{n}{d}}\sum\limits_{a|\gcd(i,j)}\mu(a)$
    $=\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{n}{d}}\sum\limits_{a=1}^{\frac{n}{d}} \lbrack a|i \rbrack \lbrack a|j \rbrack \mu(a)$
    $=\sum\limits_{d=1}^n d \sum\limits_{a=1}^{\frac{n}{d}}\mu(a)\sum\limits_{i=1}^{\frac{n}{d}}\lbrack a|i \rbrack\sum\limits_{j=1}^{\frac{n}{d}}\lbrack a|j \rbrack$
    $=\sum\limits_{d=1}^n d \sum\limits_{a=1}^{\frac{n}{d}}\mu(a)\lfloor\frac{n}{ad}\rfloor\lfloor\frac{n}{ad}\rfloor$ 注:到此为止,如果不进一步优化,结果50分超时。
    T=adT=ad
    $=\sum\limits_{d=1}^n d \sum\limits_{\frac{T}{d}=1}^{\frac{n}{d}}\mu(\frac{T}{d})\lfloor \frac{n}{T} \rfloor\lfloor \frac{n}{T} \rfloor$
    $=\sum\limits_{d=1}^nd\sum\limits_{T=1}^n\mu(\frac{T}{d})\lfloor \frac{n}{T} \rfloor \lfloor \frac{n}{T} \rfloor$
    $=\sum\limits_{T=1}^n \lfloor \frac{n}{T} \rfloor \lfloor \frac{n}{T} \rfloor \sum\limits_{d|T}d* \mu(\frac{T}{d})$ 设: F(T)=dTdμ(Td)F(T)=\sum\limits_{d|T}d* \mu(\frac{T}{d})F(T)F(T)可以前缀和。
    初始化代码如下:
    F[0]=0;
    for(int i=1;i<=N;i++)
           for(int j=i;j<=N;j+=i)
                   F[j]+=mu[j/i]*i;
    $=\sum\limits_{T=1}^n \lfloor \frac{n}{T} \rfloor \lfloor \frac{n}{T} \rfloor F(T)$

    具体代码如下:

    50分超时代码:

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    const int N=2e6;
    int pr, p[N+10];LL mu[N+10];bool v[N+10];
    void init()
    {
        memset(v, 0, sizeof(v));
        pr=0;mu[1]=1;
        for(int i=2;i<=N;i++)
    	{
            if(!v[i]) p[++pr]=i,mu[i]=-1; 
            for(int j=1;j<=pr&&p[j]*i<=N;j++)
    		{
                v[i*p[j]]=true;
                if(i%p[j]==0) {mu[i*p[j]]=0; break;}
                mu[i*p[j]]=-mu[i];
            }
            //mu[i]+=mu[i-1];
        }
    	for(int i=2;i<=N;i++)mu[i]+=mu[i-1];
    }
    LL calc(LL n)
    {
    	LL ans=0;
    	for(LL i=1;i<=n;i++)
    	{
    		LL sum=0;
    	    for(LL l=1, r, m=n/i;l<=m;l=r+1)
    		{
    	        r=m/(m/l);
    	        sum+=(mu[r]-mu[l-1])*(m/l)*(m/l);
    	    }
    	    ans+=sum*i;
    	}
        return ans;
    }
    int main()
    {
    	init();
    	int T;scanf("%d",&T);
    	while(T--)
    	{
            LL n;scanf("%lld",&n);
            printf("%lld\n",calc(n));
    	}
        return 0;
    }
    

    100分代码:

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    const int N=2e6;
    int pr, p[N+10];LL mu[N+10],F[N+10];bool v[N+10];
    void init()
    {
        memset(v, 0, sizeof(v));
    	pr=0;mu[0]=0;mu[1]=1;
        for(int i=2;i<=N;i++)
    	{
            if(!v[i]) p[++pr]=i, mu[i]=-1; 
            for(int j=1;j<=pr&&p[j]*i<=N;j++)
    		{
                v[i*p[j]]=true;
                if(i%p[j]==0) {mu[i*p[j]]=0; break;}
                mu[i*p[j]]=-mu[i];
            }
        }
        F[0]=0;
    	for(int i=1;i<=N;i++)for(int j=i;j<=N;j+=i)
    		F[j]+=mu[j/i]*i;
    	for(int i=1;i<=N;i++)F[i]+=F[i-1];
    }
    LL calc(LL n)
    {
    	LL ans=0;
        for(LL l=1, r;l<=n;l=r+1)
    	{
            r=n/(n/l);
            ans+=(F[r]-F[l-1])*(n/l)*(n/l);
        }
        return ans;
    }
    int main()
    {
    	init();
    	int T;scanf("%d",&T);
    	while(T--)
    	{
            LL n;scanf("%lld",&n);
            printf("%lld\n",calc(n));
    	}
        return 0;
    }
    
    • 1

    *【莫比乌斯反演】gcd(i,j)求和[lg2398增强版]GCD SUM+题解

    信息

    ID
    510
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    27
    已通过
    12
    上传者