*P2398 GCD SUM[数论]
题目描述
for i=1 to n
for j=1 to n
sum+=gcd(i,j)
解析
给出n求sum. gcd(x,y)表示x,y的最大公约数.
直接枚举复杂度为\(O(n^2)\),显然无法承受。
我们需要寻找更优的算法。
首先,打表找规律,当\(n=10\)时,是这样的
1 1 1 1 1 1 1 1 1 1
1 2 1 2 1 2 1 2 1 2
1 1 3 1 1 3 1 1 3 1
1 2 1 4 1 2 1 4 1 2
1 1 1 1 5 1 1 1 1 5
1 2 3 2 1 6 1 2 3 2
1 1 1 1 1 1 7 1 1 1
1 2 1 4 1 2 1 8 1 2
1 1 3 1 1 3 1 1 9 1
1 2 1 2 5 2 1 2 1 10
可以看到,上半部分和下半部分是对称的,我们考虑一边即可。
若\(gcd(i,j)=x\),那么\(gcd(ki,kj)=kx\)。
因此,显然对于任意\(gcd(i,j)=1\),有\(gcd(ki,kj)=k\),且充要。我们枚举\(k\),对于每个\(k\),计算\(gcd(ki,kj)=k\)的数量即可。
由于\(gcd(ki,kj),gcd(kj,ki)\)被算作分开的两次,而\(gcd(i,i)\)只会被算一次,所以减去1。
因此,对于所有的\(i\),计算
\]
预处理\(\varphi(k)\)的前缀和即可\(O(n)\)求解。
推导过程
Ans
&=\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\\
&=\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^{n}[gcd(i,j)==k]\\
&=\sum_{i=1}^n\sum_{j=1}^n\sum_{k\mid i , j}[gcd(i/k,j/k)==1]\\
&=\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}(2\sum_{j=1}^{i}\sum_{k=1}^n[gcd(i,j)==1]-1)\\
&=\sum_{i=1}^n(\sum_{k=1}^{\lfloor \frac{n}{i} \rfloor}2*\varphi(k)-1)*i
\end{align}
\]
*P2398 GCD SUM[数论]的更多相关文章
- 洛谷P2398 GCD SUM [数论,欧拉筛]
题目传送门 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式 ...
- P2398 GCD SUM
P2398 GCD SUM一开始是憨打表,后来发现打多了,超过代码长度了.缩小之后是30分,和暴力一样.正解是,用f[k]表示gcd为k的一共有多少对.ans=sigma k(1->n) k*f ...
- 洛谷P2398 GCD SUM (数学)
洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入 ...
- 洛谷P2398 GCD SUM
题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum ...
- 洛谷 P2398 GCD SUM || uva11417,uva11426,uva11424,洛谷P1390,洛谷P2257,洛谷P2568
https://www.luogu.org/problemnew/show/P2398 $原式=\sum_{k=1}^n(k\sum_{i=1}^n\sum_{j=1}^n[(i,j)=k])$ 方法 ...
- 洛谷 P2398 GCD SUM 题解
题面 挺有意思的. 设f[i]表示gcd(i,j)=i的个数,g[i]表示k|gcd(i,j)的个数; g[i]=(n/i)*(n/i); g[i]=f[i]+f[2i]+f[3i]+...; 所以f ...
- GCD SUM 强大的数论,容斥定理
GCD SUM Time Limit: 8000/4000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatu ...
- Luogu2398 GCD SUM
Luogu2398 GCD SUM 求 \(\displaystyle\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\) \(n\leq10^5\) 数论 先常规化式子(大雾 \[ ...
- GCD SUM
GCD SUM 求 \[\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j) \] 将原式变换得到 \[\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{ ...
随机推荐
- [Mobi] 移动端应用技术选型的思考, Native, Flutter, Quasar, React Native
今天我主要是从开发 **不同产品** 和 **技术力量差别** 两个方面来做一个比较: Native 除了两端的技术力量要求高.花的功夫多,没毛病,看你有没有这个实力. Flutter 通过实现中间层 ...
- IBM X3650 M4 安装 Windows Server 2008 R2
1 准备好 Windows Server 2008 R2 安装用的U盘 2 采用PowerISO制作启动U盘: 或者用Rufus做启动U盘. 3 接上启动U盘 4 设置Bios启动模式为 UEFI ...
- 远程登录Linux系统(使用xshell),远程上传加载文件(使用Xftp)
一.Xshell(远程登录Linux系统) 1.安装xshell 自己百度找安装包 2.连接登录 1.连接前提 需要Linux开启一个sshd的服务,监听22号端口,一般默认是开启的 查看是否开启: ...
- C复习 (C premier plus和C和指针)
- Go基础编程实践(七)—— 并发
同时运行多个函数 观察常规代码和并发代码的输出顺序. // 常规代码,顺序执行,依次输出 package main import ( "fmt" "time" ...
- 【题解】Luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串
原题传送门 实际按照题意模拟就行 我们先求出字符串的sa 因为要在字符串中出现k次,所以我们枚举\(l,r(r-l+1=k)\)看一共有多少种合法的方案 合法方案的长度下界\(lb\)为\(Max(h ...
- MyBatis返回结果类型为Boolean
问题描述: 在使用MyBatis时,有时需要检查某个记录是否存在数据库中,然后根据其返回的布尔值true or false,来进行逻辑判断.那怎么做呢? 解决方案: 如检测某个手机号是否 ...
- Teamviewer显示“未就绪,请检查您的连接”解决办法
打开TeamViewer一直提示“未就绪,请检查您的连接”,一直会弹出一个框提示检查网路设置什么. 解决办法:修改DNS为114.114.114.114,然后TeamViewer就显示网络正常. 为什 ...
- Linux生产环境上,最常用的一套“Sed“技巧
sed命令应用广泛,使用简单,是快速文本处理的利器.它其实没多少技巧,背诵.使用是最合适的学习渠道,属于硬技能.但它又很复杂,因为高级功能太多.本篇不去关注sed的高级功能,仅对常用的一些操作,进行说 ...
- iOS - FlexBox 布局之 YogaKit
由于刚开始的项目主要用的H5.javaScript技术为主原生开发为辅的手段开发的项目,UI主要是还是H5,如今翻原生.为了方便同时维护两端.才找到这个很不错的库. FlexBox?听起来像是一门H5 ...