首页 > 代码库 > 【反演复习计划】【51nod1594】Gcd and Phi
【反演复习计划】【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\n",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
【反演复习计划】【51nod1594】Gcd and Phi
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。