zoukankan      html  css  js  c++  java
  • 【反演复习计划】【51nod1594】Gcd and Phi

    现在感觉反演好多都是套路QAQ……

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e6+5;
    typedef long long ll;
    int n,cnt,prime[N],phi[N],mu[N],vis[N];
    ll ans,s[N],f[N];
    void calcmu(){
        memset(prime,0,sizeof(prime));cnt=0;
        memset(phi,0,sizeof(phi));memset(mu,0,sizeof(mu));
        memset(s,0,sizeof(s));memset(f,0,sizeof(f));
        mu[1]=1;phi[1]=1;memset(vis,1,sizeof(vis));
        for(int i=2;i<=n;i++){
            if(vis[i]){prime[++cnt]=i;mu[i]=-1;phi[i]=i-1;}
            for(int j=1;j<=cnt;j++){
                int t=prime[j]*i;if(t>n)break;
                vis[t]=0;
                if(i%prime[j]==0){
                    mu[t]=0;phi[t]=phi[i]*prime[j];
                    break;
                }
                mu[t]=-mu[i];phi[t]=phi[i]*(prime[j]-1);
            }
        }
        for(int i=1;i<=n;i++)s[phi[i]]++;
        for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j+=i)f[i]+=s[j];
        for(int i=1;i<=n;i++)f[i]=f[i]*f[i];
        for(int i=1;i<=n;i++)if(mu[i]!=0)
        for(int d=1;i*d<=n;d++)ans+=mu[i]*phi[d]*f[i*d];
        printf("%lld
    ",ans);
    }
    inline int read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    int main(){
        int T=read();
        while(T--){
            n=read();ans=0;calcmu();
        }
    }

    现在没有爱蜜莉雅碳陪我做题啦TAT

  • 相关阅读:
    《互联网时代》第三集·能量
    《互联网时代》第二集·浪潮
    java 基础类库之 SysFun
    java 基础类库之 SQLFun
    java 基础类库之 FormatFun
    Java 之 JDBC
    WepE
    MySql学习笔记
    Oracle学习笔记——点滴汇总
    Linux学习笔记——基于鸟哥的Linux私房菜
  • 原文地址:https://www.cnblogs.com/zcysky/p/6901284.html
Copyright © 2011-2022 走看看