Luogu2398 GCD SUM

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

\(n\leq10^5\)

数论


先常规化式子(大雾

\[\begin{aligned}&\displaystyle\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\\&=\displaystyle\sum_{k=1}^n\sum_{i=1}^n\sum_{j=1}^n{\ k\times[\gcd(i,j)=k]}\\&=\displaystyle\sum_{k=1}^nk\sum_{i=1}^n\sum_{j=1}^n{[\gcd(i, j)=k]}\\&=\displaystyle\sum_{k=1}^n{k\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}}\sum_{j=1}^{\lfloor\frac{n}{k}\rfloor}{[\gcd(i,j)=1]}\end{aligned}
\]

似乎原问题就转化为了快速求 \(\displaystyle{\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}}\sum_{j=1}^{\lfloor\frac{n}{k}\rfloor}{[\gcd(i,j)=1]}\)

是不是有点 似曾相识

容易发现上式可以用 \(\varphi\) 替代,即 \(2\displaystyle\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\varphi(i)-1\)

因此原式即为 $$\displaystyle\sum_{k=1}n{k (2\displaystyle\sum_{i=1}{\lfloor\frac{n}{k}\rfloor}\varphi(i)-1)}$$

时间复杂度 \(O(n)\) ,也可以用数论分块优化到 \(O(\sqrt n)\)

代码

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = 1e5 + 10;
int n, tot, p[maxn]; ll phi[maxn]; void sieve() {
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (!p[i]) p[++tot] = i, phi[i] = i - 1;
for (int j = 1; j <= tot && i * p[j] <= n; j++) {
p[i * p[j]] = 1;
if (i % p[j] == 0) {
phi[i * p[j]] = phi[i] * p[j]; break;
}
phi[i * p[j]] = phi[i] * phi[p[j]];
}
}
for (int i = 1; i <= n; i++) {
phi[i] += phi[i - 1];
}
} int main() {
scanf("%d", &n), sieve(); ll ans = 0;
for (int i = 1; i <= n; i++) {
ans += i * (phi[n / i] * 2 - 1);
}
printf("%lld", ans);
return 0;
}

Luogu2398 GCD SUM的更多相关文章

  1. acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy

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

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

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

  3. bnu——GCD SUM (莫比乌斯反演)

    题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 #include<stdio.h& ...

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

  5. P2398 GCD SUM

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

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

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

  8. LuoguP2398 GCD SUM

    题目地址 题目链接 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n ...

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

随机推荐

  1. 16-pymysql模块的使用

    [转]16-pymysql模块的使用 本节重点: pymysql的下载和使用 execute()之sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetc ...

  2. Salesforce 数据备份和恢复小知识

    数据备份的类型 在Salesforce中可以使用多种API进行数据备份,它们是: REST API SOAP API Buik API Metadata API 数据备份有三种选择: 完全备份(Ful ...

  3. 数据分析 - 美国金融科技公司Prosper的风险评分分析

    数据分析 - 美国金融科技公司Prosper的风险评分分析 今年Reinhard Hsu觉得最有意思的事情,是参加了拍拍贷第二届魔镜杯互联网金融数据应用大赛.通过"富爸爸队",认识 ...

  4. 改变RadioButton的文字位置以及距离

    在默认情况下,RadioButton的 文字位置和文字的距离是不变的,为了可以改变它,我们可以用以下的方法. 1.改变文字的位置 android:button="@null" // ...

  5. git 入门教程之基本概念

    基本概念 了解工作区,暂存区和版本库的区别和联系有助于我们更好理解 git 的工作流程,了解命令的操作意图. git 和其他版本控制系统如 svn 的不同之处就是有暂存区的概念. 基本概念 工作区 | ...

  6. Keras实现VGG16

    一.代码实现 # -*- coding: utf-8 -*- """ Created on Sat Feb 9 15:33:39 2019 @author: zhen & ...

  7. shell编程 学好内功(一)

    shell 背景 什么是shell编程 高大上的解释,往往让人摸不住头脑.一句话概括就是:shell编程就是对一堆Linux命令的逻辑化处理. 为什么要会shell编程 举个简单的例子,我们做java ...

  8. 自动化测试基础篇--Selenium简单的163邮箱登录实例

    摘自https://www.cnblogs.com/sanzangTst/p/7472556.html 前面几篇内容一直讲解Selenium Python的基本使用方法.学习了什么是selenium: ...

  9. 转:EditPuls 5.0 注册码

    EditPlus5.0注册码 注册名 Vovan 注册码 3AG46-JJ48E-CEACC-8E6EW-ECUAW EditPlus3.x注册码 EditPlus注册码生成器链接 http://ww ...

  10. c/c++ const关键字

    const 在星号的右边:不可以改指针的指向,可以用指针改里面的值 int * const p; const在星号的左边:可以改指针的指向,不可以用指针改里面的值 int const *p; cons ...