题目描述

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\),计算

\[\sum_{i=1}^n(\sum_{k=1}^{\lfloor \frac{n}{i} \rfloor}2*\varphi(k)-1)*i
\]

预处理\(\varphi(k)\)的前缀和即可\(O(n)\)求解。

推导过程

\[\begin{align}
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[数论]的更多相关文章

  1. 洛谷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的最大公约数. 输入输出格式 输入格式 ...

  2. P2398 GCD SUM

    P2398 GCD SUM一开始是憨打表,后来发现打多了,超过代码长度了.缩小之后是30分,和暴力一样.正解是,用f[k]表示gcd为k的一共有多少对.ans=sigma k(1->n) k*f ...

  3. 洛谷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的最大公约数. 输入输出格式 输入 ...

  4. 洛谷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 ...

  5. 洛谷 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])$ 方法 ...

  6. 洛谷 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 ...

  7. GCD SUM 强大的数论,容斥定理

    GCD SUM Time Limit: 8000/4000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatu ...

  8. Luogu2398 GCD SUM

    Luogu2398 GCD SUM 求 \(\displaystyle\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\) \(n\leq10^5\) 数论 先常规化式子(大雾 \[ ...

  9. 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}{ ...

随机推荐

  1. npx vs npm

    npx vs npm npx 使用教程

  2. oracle登录信息对应

    登录数据库填写的是,配置文件中自己定义的值 2. 查询非纯数字值的字段内容 select trim(translate(RTRIM(LTRIM(ITEM_NUMBER)), '#0123456789' ...

  3. PHP不过过滤防止xss攻击的方法

    PHP不过过滤防止xss攻击的方法<pre> $content=htmlspecialchars($content); $pos=strpos($content,"\u" ...

  4. 五、Spring中的@Import注解

    一.使用@Import注解导入组件 @Import注解的作用是给容器中导入组件,回顾下我们给容器中导入组件的方式,可以通过Spring的xm配置方式,可以通过注解,如@Component等,也可以通过 ...

  5. 执行sudo supervisorctl reload报错ImportError: No module named supervisor.supervisord

    由于yum install supervisor 会默认使用python2.6环境,首先要安装好python2.6的环境,然后修改以下文件首行为2.6即可 [root@VM_0_15_centos ~ ...

  6. [转帖]Linux中buff/cache内存占用过高解决办法

    Linux中buff/cache内存占用过高解决办法 https://www.cnblogs.com/rocky-AGE-24/p/7629500.html /proc/sys/vm/drop_cac ...

  7. EasyExcel读取文件-同步处理数据

    读取代码 // 前端传过来的文件 MultipartFile file; InputStream inputStream = file.getInputStream(); // 读取excel数据,边 ...

  8. Jenkins版本迭代以及回滚

    一.摘要 在上一篇文章,链接如下: https://www.cnblogs.com/xiao987334176/p/11434849.html 镜像打的是latest版,如果需要回滚的话,就比较麻烦了 ...

  9. Openshift概念

    Openshift是一个开源容器云平台,是一个基于主流的容器技术Docker和K8s构建的云平台.Openshift底层以Docker作为容器引擎驱动,以K8s作为容器编排引擎组件,并提供了开发语言, ...

  10. Windows 7 下安装 docker

    Windows 7 下需要安装docker toolbox即可(里面打包了docker.oracle virtualbox.Git) 1. 下载 1. 下载路径https://github.com/d ...