OTZ 又被吊打了。。。我当初学的都去哪了???


思路:反演套路?

提交:\(1\)次

题解:

求\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(\varphi(i),\varphi(j)))\)

设\(c[i]=\sum_{j=1}^n[\varphi(j)==i]\)

有:

\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))*c[i]*c[j]\)

欧拉反演一下,把\(gcd\)扔出来

\(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{d|gcd(i,j)}\varphi(d)*c[i]*c[j]*[gcd(i,j)==d]\)

$\sum_{d=1}^{n}\varphi(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\ \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} c[id] * c[jd] * [gcd(i,j)==1] $

$\sum_{d=1}^{n}\varphi(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}c[id] \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}c[jd] \ [gcd(i,j)==1] $

\(\sum_{d=1}^{n}\varphi(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}c[i*d] \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}c[j*d] \sum_{k|gcd(i,j)} \mu(k)\)

\(\sum_{d=1}^{n}\varphi(d) \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} \mu(k) \sum_{i=1}^{\lfloor \frac{n}{d*k} \rfloor}c[i*d*k] \sum_{j=1}^{\lfloor \frac{n}{d*k} \rfloor}c[j*d*k]\)

设\(s[i]=\sum_{j=1}^{\lfloor \frac{n}{i} \rfloor}\ c[i*j]\),注意到\(s[i]\)可以在\(O(nlogn)\)计算出来

\(\sum_{d=1}^{n}\ \varphi(d) \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} \mu(k)\ s[d*k]^2\)

交换一下\(d\)与\(k\),可以优化枚举(见代码)

\(\sum_{d=1}^{n}\ \mu(d) \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} \varphi(k)\ s[d*k]^2\)

#include<cstdio>
#include<iostream>
#include<cstring>
#define ll long long
#define R register ll
using namespace std;
namespace Luitaryi {
template<class I> inline I g(I& x) { x=0;
register I f=1; register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*=f;
} const int N=2e6;
int T,n,cnt,p[N>>1],phi[N+10],mu[N+10],c[N+10];
ll s[N+10],ans; bool v[N+10];
inline void PRE() { phi[1]=mu[1]=1;
for(R i=2;i<=N;++i) {
if(!v[i]) p[++cnt]=i,phi[i]=i-1,mu[i]=-1;
for(R j=1;j<=cnt&&i*p[j]<=N;++j) {
v[i*p[j]]=true;
if(i%p[j]==0) {
phi[i*p[j]]=phi[i]*p[j];
break;
} phi[i*p[j]]=phi[i]*(p[j]-1);
mu[i*p[j]]=-mu[i];
}
}
}
inline void calc(int n) { ans=0;
memset(c,0,sizeof(c)),memset(s,0,sizeof(s));
for(R i=1;i<=n;++i) ++c[phi[i]];
for(R i=1;i<=n;++i) for(R j=1,lim=n/i;j<=lim;++j) s[i]+=c[i*j];
for(R d=1;d<=n;++d) if(mu[d]) for(R k=1,lim=n/d;k<=lim;++k) //if(mu[d]) 优化枚举
ans+=mu[d]*phi[k]*s[d*k]*s[d*k];
}
inline void main() {g(T); PRE(); while(T--) g(n),calc(n),printf("%lld\n",ans);}
} signed main() {Luitaryi::main(); return 0;}

2019.08.11

89

51nod 1594 Gcd and Phi 反演的更多相关文章

  1. 51nod 1594 Gcd and Phi(莫比乌斯反演)

    题目链接 传送门 思路 如果这题是这样的: \[ F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\phi(gcd(i,j)) \] 那么我们可能会想到下 ...

  2. 【51nod】1594 Gcd and Phi

    题解 跟随小迪学姐的步伐,学习一下数论 小迪学姐太巨了! 这道题的式子很好推嘛 \(\sum_{i = 1}^{n} \sum_{j = 1}^{n} \sum_{d|\phi(i),\phi(j)} ...

  3. 【BZOJ2820】YY的GCD(莫比乌斯反演)

    [BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...

  4. 【BZOJ2818】Gcd(莫比乌斯反演)

    [BZOJ2818]Gcd(莫比乌斯反演) 题面 Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Ou ...

  5. 【HDU1695】GCD(莫比乌斯反演)

    [HDU1695]GCD(莫比乌斯反演) 题面 题目大意 求\(a<=x<=b,c<=y<=d\) 且\(gcd(x,y)=k\)的无序数对的个数 其中,你可以假定\(a=c= ...

  6. 51NOD 1594:Gcd and Phi——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1594 参考及详细推导:http://www.cnblogs.com/ri ...

  7. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  8. 【莫比乌斯反演】51nod1594 Gcd and Phi

    题解 显然可以O(nlogn)计算 代码 //by 减维 #include<set> #include<map> #include<queue> #include& ...

  9. 【反演复习计划】【51nod1594】Gcd and Phi

    现在感觉反演好多都是套路QAQ…… #include<bits/stdc++.h> using namespace std; ; typedef long long ll; int n,c ...

随机推荐

  1. ORACLE 的前后台进程

    关于oracle用户进程,服务进程,后台进程 用户进程(User Process) 是一个需要与Oracle Server交互的程序 运行于客户端 当用户运行某个工具或应用程序(如SQL*Plus)时 ...

  2. Ubuntu16.04 换源(或者404 Not Found问题)

    当执行sudo apt-get update或者sudo apt-get install命令时,出现以下两个问题: “apt-get 404 Not Found Package Repository ...

  3. asp.net core-1.在控制台创建ASP.NET Core应用程序

    创建asp.net core应用程序,需要先把环境安装好,我这边选的是vs2017 第一步先执行dotnet 我执行dotnet --help可以把所有的命令全部列出来: 红框内就是我们可以用来初始化 ...

  4. Tomcat安装及其目录结构介绍

    Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomcat的安装版本有绿色解压 ...

  5. hdu 1325

    .,. 还是待整理 #include <stdio.h> const; typedef struct { int num,root,conn;//数据.根.入度 }Node; Node n ...

  6. android 仿微信朋友圈图片选择控件

    调用方式(布局文件就是一个自定义控件): private ArrayList<String> selectedImages; @BindView(R.id.imagePicker) Ima ...

  7. ES 6 日期util.js =>

    微信小程序demo const formatTime = date => { const year = date.getFullYear() const month = date.getMont ...

  8. restTemplate源码解析(五)处理ClientHttpResponse响应对象

    所有文章 https://www.cnblogs.com/lay2017/p/11740855.html 正文 上一篇文章中,我们执行了ClientHttpRequest与服务端进行交互.并返回了一个 ...

  9. css3 transform实现水平和垂直居中

    代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  10. js监听audio播放完毕

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...