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. python 正则 re模块(详细版)

    正则表达式 什么是正则表达式? 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合 ...

  2. windows下java环境变量的一点心得

    JAVA_HOME:D:\software\java\jdk1.8.0_121 CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar ...

  3. 数据库设计_ERMaster安装使用_PowerDesigner数据设计工具

    数据库设计 1. 说在前面 项目开发的流程包括哪些环节 需求调研[需求调研报告]-- 公司决策层 (1) 根据市场公司需求分析公司是否需要开发软件来辅助日常工作 (2) 公司高层市场考察,市场分析,决 ...

  4. kubernetes核心组件kube-proxy

    一.  kube-proxy 和 service  kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重 ...

  5. 虚拟机Vmware使用记录

    一直使用的是docker for windows,但是总会出现能打包,能打tag,但是push超时,所以想着弄个虚拟机来实现. 第一步: 安装VMware,安装一个ubantu最新的系统. 第二步: ...

  6. 【SQL Server性能优化】运用SQL Server的全文检索来提高模糊匹配的效率

    原文:[SQL Server性能优化]运用SQL Server的全文检索来提高模糊匹配的效率 今天去面试,这个公司的业务需要模糊查询数据,之前他们通过mongodb来存储数据,但他们说会有丢数据的问题 ...

  7. c#基础知识梳理(五)

    上期回顾 - https://www.cnblogs.com/liu-jinxin/p/10831189.html 一.运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户 ...

  8. OutOfRangeError的解决办法

    自制TFRecord数据集,训练神经网络出现的一个问题,及解决办法.   错误现象: 数据训练完成后,测试数据集正确率时,运行mnist_test.py文件,出现错误代码 问题分析:显示需测试数据10 ...

  9. linux安装tmux分屏插件

    linuxtmux分屏 一.安装tmux 二.基本使用 三.鼠标操作 一.安装tmux yum install -y tmux TMUX2版本以下 二.基本使用 使用tmux一般使用命令和快捷键来操作 ...

  10. [JZOJ100019]A--dfn序+扫描线

    [JZOJ100019]A--dfn序+扫描线 题目链接 太懒了自行搜索 分析 这道题查了一个下午的错,真的心态崩了 不过这道题确实妙啊 类比于喝喝喝,我们发现任何一条覆盖了非法路径的路径一定不合法, ...