【反演复习计划】【51nod1594】Gcd and Phi
2024-08-26 21:43:06
现在感觉反演好多都是套路QAQ……
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+;
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,,sizeof(prime));cnt=;
memset(phi,,sizeof(phi));memset(mu,,sizeof(mu));
memset(s,,sizeof(s));memset(f,,sizeof(f));
mu[]=;phi[]=;memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
if(vis[i]){prime[++cnt]=i;mu[i]=-;phi[i]=i-;}
for(int j=;j<=cnt;j++){
int t=prime[j]*i;if(t>n)break;
vis[t]=;
if(i%prime[j]==){
mu[t]=;phi[t]=phi[i]*prime[j];
break;
}
mu[t]=-mu[i];phi[t]=phi[i]*(prime[j]-);
}
}
for(int i=;i<=n;i++)s[phi[i]]++;
for(int i=;i<=n;i++)
for(int j=i;j<=n;j+=i)f[i]+=s[j];
for(int i=;i<=n;i++)f[i]=f[i]*f[i];
for(int i=;i<=n;i++)if(mu[i]!=)
for(int d=;i*d<=n;d++)ans+=mu[i]*phi[d]*f[i*d];
printf("%lld\n",ans);
}
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
int T=read();
while(T--){
n=read();ans=;calcmu();
}
}
现在没有爱蜜莉雅碳陪我做题啦TAT
最新文章
- 蓝牙 BLE GATT 剖析(一)
- Python模块(pickle)
- VBS数组函数学习实例分析
- 用 Xamarin for VS 创建 aar 文件的绑定
- 设置 ubuntu ftp
- js时间字符串转Date对象
- Java使用poi包读取Excel文档
- hdoj 2620 Bone Collector(0-1背包)
- vim_编码配置文件_utf8乱码解决
- C#多功能DataGridView打印类(WinForm)
- springboot2.0整合shiro出现ShiroDialect报错 找不到org/thymeleaf/processor/attr/AbstractTextChildModifierAttrPr
- AHOI2019游记
- jquery判断<;inpur type=";checkbox"; checked>;是否被选择
- 自动化运维之cobbler安装centos7.3
- loj#2054. 「TJOI / HEOI2016」树
- 微软BI 之SSIS 系列 - Execute SQL Task 中的 Single Row 与 Full Result Set 的处理技巧
- hdoj:2047
- are not called implicitly
- Spark学习笔记1:Spark概览
- 「SHOI2015」自动刷题机