zoukankan      html  css  js  c++  java
  • 欧拉心算

    传送门

    解法:

    [egin{align} sum_{i=1}^nsum_{j=1}^nphi(gcd(i,j))&=sum_{d=1}phi(d)sum_{i=1}^nsum_{j=1}^n[d==gcd(i,j)]\ &=sum_{d=1}^nphi(d)sum_{i=1}^{lfloorfrac{n}{d} floor}sum_{j=1}^{lfloorfrac{n}{d} floor}sum_{k=1}^{lfloorfrac{n}{d} floor}mu(k)[k|gcd(i,j)]\ &=sum_{T=1}^nlfloorfrac{n}{T} floor^2mu*phi(T)\ end{align} ]

    下面考虑转化这个式子

    [sum_{i=1}^nf*g(i)=sum_{i=1}^nf(i)sum_{j=1}^{lfloorfrac{n}{i} floor}g(j)\ egin{align} sum_{i=1}^nphi(i)sum_{j=1}^{lfloorfrac{n}{i} floor}phi(j)&=sum_{i=1}^nmu*phi(i)sum_{j=1}^{lfloorfrac{n}{i} floor}id(j)\ &=sum_{i=1}^nmu*phi(i)frac{lfloorfrac{n}{i} floor(lfloorfrac{n}{i} floor+1)}{2}\ &=frac{sum_{i=1}^nlfloorfrac{n}{i} floor^2mu*phi(i)+sum_{i=1}^nlfloorfrac{n}{i} floormu*phi(i)}{2}\ &=frac{sum_{i=1}^nlfloorfrac{n}{i} floor^2mu*phi(i)+sum_{i=1}^nphi(i)}{2}\ end{align}\ sum_{i=1}^nlfloorfrac{n}{i} floor^2mu*phi(i)=2 imessum_{i=1}^nphi(i)sum_{j=1}^{lfloorfrac{n}{i} floor}phi(j)-sum_{i=1}^nphi(i) ]

    代码:

    //https://www.lydsy.com/JudgeOnline/problem.php?id=4804
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<cmath>
    #include<map>
    #include<queue>
    #include<bitset>
    #include<set>
    #define rep(i,a,b) for(int i=(a);i<=(b);++i)
    #define dwn(i,a,b) for(int i=(a);i>=(b);--i)
    using namespace std;
    typedef long long ll;
    const int N=10000000;
    int T,n,cnt,prime[1000010];
    bool v[N+10];
    ll phi[N+10];
    inline void init(int n)
    {
        phi[1]=1;
        rep(i,2,n)
        {
            if(!v[i])
            {
                prime[++cnt]=i;
                phi[i]=i-1;
            }
            for(int j=1;j<=cnt&&prime[j]*i<=n;++j)
            {
                v[prime[j]*i]=1;
                if(i%prime[j]==0)
                {
                    phi[prime[j]*i]=phi[i]*prime[j];
                    break;
                }
                phi[prime[j]*i]=phi[i]*(prime[j]-1);
            }
        }
        rep(i,2,n)
        {
            phi[i]+=phi[i-1];
        }
    }
    int main()
    {
        init(N);
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            ll ans=0;
            for(int l=1,r;l<=n;l=r+1)
            {
                r=n/(n/l);
                ans+=phi[n/l]*(phi[r]-phi[l-1]);
            }
            printf("%lld
    ",2*ans-phi[n]);
        }
        return 0;
    }
    
  • 相关阅读:
    dubbo服务的运行方式(2)
    朱砂掌健身养生功
    吴清忠养生网
    易筋经十二式
    dubbo入门(1)
    jquery ajax error函数和及其参数详细说明
    com.rabbitmq.client.ShutdownSignalException
    centos 安装rabbitMQ
    SpringMVC @RequestBody接收Json对象字符串
    跨域
  • 原文地址:https://www.cnblogs.com/MYsBlogs/p/11440159.html
Copyright © 2011-2022 走看看