博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4804: 欧拉心算
阅读量:5115 次
发布时间:2019-06-13

本文共 1528 字,大约阅读时间需要 5 分钟。

数论题不多BB,直接开始推导吧:

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

\(=\sum_{i=1}^n \sum_{j=1}^n \sum_{d=1}^n [gcd(i,j)=d]\phi(d)\)

\(=\sum_{d=1}^n \phi(d)\cdot(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{\lfloor\frac{n}{d}\rfloor} [gcd(i,j)=1])\)

然后\(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{\lfloor\frac{n}{d}\rfloor} [gcd(i,j)=1]=2\cdot\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \phi(i) -1\),这个也是一个比较常用的结论了吧。具体可以看的推导,之后为了方便,我们记\(sum_x=\sum_{i=1}^x \phi(i)\)

则上式\(=\sum_{d=1}^n(\phi(d)\cdot (2\cdot sum_{\lfloor\frac{n}{d}\rfloor}-1))\)

\(=2\cdot \sum_{d=1}^n(\phi(d)\cdot sum_{\lfloor\frac{n}{d}\rfloor})-sum_n\)

接下来就好做了,我们先把欧拉函数求前缀和,然后对于询问除法分块处理不同的\(sum_{\lfloor\frac{n}{d}\rfloor}\)即可。

复杂度\(O(n+T\sqrt n)\),轻松跑过

CODE

#include
#define RI register intusing namespace std;const int P=1e7;int prime[P+5],phi[P+5],cnt,n,t; long long ans,sum[P+5]; bool vis[P+5];inline void resolve(void){ vis[1]=sum[1]=phi[1]=1; for (RI i=2;i<=P;++i) { if (!vis[i]) prime[++cnt]=i,phi[i]=i-1; for (RI j=1;j<=cnt&&i*prime[j]<=P;++j) { vis[i*prime[j]]=1; if (i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1); else { phi[i*prime[j]]=phi[i]*prime[j]; break; } } sum[i]=sum[i-1]+phi[i]; }}int main(){ for (scanf("%d",&t),resolve();t;--t) { scanf("%d",&n); ans=0; RI i,l,r; for (l=1;l<=n;l=r+1) r=n/(n/l),ans+=sum[n/l]*(sum[r]-sum[l-1]); printf("%lld\n",(ans<<1)-sum[n]); } return 0;}

转载于:https://www.cnblogs.com/cjjsb/p/9720241.html

你可能感兴趣的文章
局网满猿关不住,一波码农出墙来。
查看>>
ios开发学习--选项卡(Tab Bar) 效果源码分享--系列教程
查看>>
涉略spring
查看>>
CHM.BAT
查看>>
delphi脚本
查看>>
[转载]jQuery1.6.1源码分析系列
查看>>
MySql简介
查看>>
APP审核关于3.2.1金融资格的审核回复苹果
查看>>
C陷阱与缺陷--读书笔记3 语义“陷阱”
查看>>
linux 清理cache中的内存
查看>>
解决Windows应用程序Side-by-Side错误
查看>>
PHP 错误与异常 笔记与总结(6)将错误日志保存在系统日志中
查看>>
C++指针参数引用
查看>>
HDU 4744 Starloop System(最小费用最大流)(2013 ACM/ICPC Asia Regional Hangzhou Online)
查看>>
CSS的:after用法
查看>>
实验一缓冲区溢出漏洞实验
查看>>
Django相关配置(包括数据库、templates、static等)信息—Django2.0
查看>>
一个常见的下拉框(css)
查看>>
模板方法模式.
查看>>
如何在VS上用C#玩坏“Hello World”。
查看>>