点此看题面

大致题意: 多组询问,求\(\sum_{i=L}^R\sum_{j=i+1}^Rgcd(i,j)\)。

推式子

这道题我们可以考虑,每个因数\(d\)被统计答案的次数,肯定与其出现次数有关。

设它出现次数为\(cnt_d\),则可以猜测答案为:

\[\sum_{d=1}^nd\cdot C_{cnt_d}^2\]

这显然是错的,因为\(d\)虽作为公因数,却不一定是最大公约数。

所以就可以考虑容斥

对于一个统计过的数\(x\),按照我们先前的做法,对于任意\(d|x\),\(d\)一定都被统计过了。

可以发现,这似乎恰好是一个欧拉函数

于是式子就可以化成:

\[\sum\phi(d)*C_{cnt_d}^2\]

求解

我们先用线性筛筛出欧拉函数,然后预处理出每个数的因数。

接下来对于这种区间问题,自然可以用莫队来搞。

每次转移时枚举因数更新答案即可。

但还有个问题,枚举因数更新答案似乎会\(TLE\)?

但据\(hl666\)神仙证明,每个数的因数个数是\(O(logN)\)的!

这样时间复杂度就是\(O(n\sqrt NlogN)\),而\(N\le20000\),可以过。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 20000
#define LL long long
using namespace std;
int n,a[N+5];
class FastIO
{private:#define FS 100000#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)#define pc(c) (C^FS?FO[C++]=c:(fwrite(FO,1,C,stdout),FO[(C=0)++]=c))#define tn (x<<3)+(x<<1)#define D isdigit(c=tc())int T,C;char c,*A,*B,FI[FS],FO[FS],S[FS];public:I FastIO() {A=B=FI;}Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}Tp I void write(Ty x) {W(S[++T]=x%10+48,x/=10);W(T) pc(S[T--]);}Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}Tp I void writeln(Con Ty& x) {write(x),pc('\n');}I void writes(Con string& x) {for(RI i=0,l=x.length();i^l;++i) pc(x[i]);}I void clear() {fwrite(FO,1,C,stdout),C=0;}
}F;
class CaptainMotao//莫队
{private:static const int Q=20000;int Bsz,cnt[N+5];LL res,ans[Q+5];struct Query//存储询问{int l,r,bl,pos;I Query(CI x=0,CI y=0,CI b=0,CI p=0):l(x),r(y),bl(b),pos(p){}I bool operator < (Con Query& t) const {return bl^t.bl?bl<t.bl:(bl&1?r<t.r:r>t.r);}//排序}q[Q+5];class LineSiever//初始化{private:static const int SZ=N;int Pcnt,P[SZ+5];public:int phi[SZ+5];vector<int> fac[SZ+5];I LineSiever(){RI i,j;for(phi[1]=1,i=2;i<=SZ;++i) for(!P[i]&&(phi[P[++Pcnt]=i]=i-1),j=1;1LL*i*P[j]<=SZ;++j)if(P[i*P[j]]=1,i%P[j]) phi[i*P[j]]=phi[i]*(P[j]-1);else {phi[i*P[j]]=phi[i]*P[j];break;}for(i=1;i<=SZ;++i) for(j=i;j<=SZ;j+=i) fac[j].push_back(i);}}S;I void Add(CI x) {for(RI i=0,s=S.fac[x].size();i^s;++i) res+=1LL*S.phi[S.fac[x][i]]*cnt[S.fac[x][i]]++;}//增大区间I void Del(CI x) {for(RI i=0,s=S.fac[x].size();i^s;++i) res-=1LL*S.phi[S.fac[x][i]]*--cnt[S.fac[x][i]];}//缩小区间public:I void Solve()//求解答案{RI Qtot,i,x,y,L=1,R=0;memset(cnt,0,sizeof(cnt)),Bsz=sqrt(n),F.read(Qtot);for(i=1;i<=Qtot;++i) F.read(x,y),q[i]=Query(x,y,(x-1)/Bsz+1,i);//读入数据for(res=0,sort(q+1,q+Qtot+1),i=1;i<=Qtot;++i)//排序并处理{W(R<q[i].r) Add(a[++R]);W(L>q[i].l) Add(a[--L]);W(R>q[i].r) Del(a[R--]);W(L<q[i].l) Del(a[L++]);//更新区间ans[q[i].pos]=res;//记录答案}static int t=0;F.writes("Case #"),F.write(++t),F.writes(":\n");for(i=1;i<=Qtot;++i) F.writeln(ans[i]);//输出答案}
}C;
int main()
{RI Ttot,i;F.read(Ttot);W(Ttot--){for(F.read(n),i=1;i<=n;++i) F.read(a[i]);//读入C.Solve();//莫队求解}return F.clear(),0;
}

转载于:https://www.cnblogs.com/chenxiaoran666/p/HDU4676.html

【HDU4676】Sum Of Gcd(莫队+欧拉函数)相关推荐

  1. HDU - 5381 The sum of gcd(莫队/线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...

  2. GCD - Extreme(欧拉函数变形)

    题目链接:https://vjudge.net/problem/UVA-11426 题目大意: 给出整数n∈[2,4000000],求解∑gcd(i,j),其中(i,j)满足1≤i<j≤n. 的 ...

  3. 数论 GCD 最大公约数 欧拉函数经典题 洛谷 CF1295D Same GCDs Codeforces1295D

    ​前言 两个月了,我终于更了-- 这两个月忙(chen)于(mi)内(xiang)卷(le),现在终于出新文章啦,(也算兑现了当初的出数论题文章的承诺)~ 不说废话了,今天给大家介绍一道CF/洛谷上的 ...

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

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

  5. 欧拉函数+狄利克雷卷积+莫比乌斯函数+莫比乌斯反演+整除分块+杜教筛

    Powered by:NEFU AB-IN 文章目录 欧拉函数 狄利克雷卷积 莫比乌斯函数 莫比乌斯反演 P3455 [POI2007]ZAP-Queries 整除分块 P2522 [HAOI2011 ...

  6. POJ 2480 (约数+欧拉函数)

    题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...

  7. poj2154Color polya定理+欧拉函数优化

    没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...

  8. BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)

    传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Dis ...

  9. hdu (欧拉函数+容斥原理) GCD

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...

最新文章

  1. 一不小心,删错了,还把回收站清空了,咋办啊?
  2. N76E003快速上手使用和大坑提示
  3. 华为云服务器 大文件,云服务器上传大文件
  4. 方差和协方差的数据意义
  5. apache2 php mysql_二、Linux服务器apache2+PHP7+mysql环境配置
  6. bat文件运行java的jar包不弹出dos窗口,开机自启jar包
  7. php删除oracle数据记录日志文件,Oracle手动切换日志文件和清空日志文件
  8. 讲一个让你们难过很久的故事吧?
  9. thumbnails 变黑_phpcms v9图片生成缩略图变成黑色解决方法
  10. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...
  11. Java进阶:The driver is automatically registered via the SPI and manual loading of the driver class is
  12. python 3d游戏脚本_3ds Max python脚本编写及部分API介绍
  13. C语言小游戏,游戏设计,500+行代码
  14. 【IT之路】LoadRunner系列-Loadrunner 11破解汉化
  15. 学习通网络看课鼠标不能离开页面问题
  16. java 日语文档翻译_日语文档怎么翻译?一分钟教会你日语翻译
  17. ftp下载工具 免费,3款绝对让你喜欢的免费ftp下载工具
  18. ultron,奥创,ultron官网,奥创官网,奥创中国区官网,ultron中国区官网,奥创公链,ultron公链,ulx,ultron奥创,海洋renhe333333
  19. 西安的一些互联网公司一览
  20. 北大计算机双证在职研究生,北京大学在职研究生是双证还是单证

热门文章

  1. android 父控件的背景_android控件的属性
  2. 关于js中sort排序的用法
  3. 音频呼叫界面设计_使用网络音频来增强您的用户界面
  4. 【全文翻译】Edge Intelligence: Paving the Last Mile of Artificial Intelligence With Edge Computing
  5. coinex05 // 撮合交易 与 并发
  6. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java动漫衍生品交易平台z25so
  7. 关于如何在Termux上安装kali(最好用旧手机)
  8. picasso介绍及使用
  9. 程序员欣宸的文章分类汇总
  10. 网络文件夹目前是以其他用户名和密码进行映射的