题目大意:求 $$\sum\limits_{i=1}n\sum\limits_{j=1}ngcd(i,j)$$

题解:

最重要的一步变换在于。

\[\sum\limits_{k=1}^n k \sum\limits_{d=1}^{\lfloor{n\over k}\rfloor}\mu(d)\lfloor{n\over kd}\rfloor\lfloor{n\over kd}\rfloor
\]

令 $$t = kd$$,枚举 \(t\) 得

\[\sum\limits_{t=1}^n\lfloor{n\over t}\rfloor\lfloor{n\over t}\rfloor \sum\limits_{k|t}\mu({t\over k})k
\]

根据狄利克雷卷积可知,后面求和为欧拉函数 \(\varphi(t)\)。最后线性筛+除法分块即可,时间复杂度 \(O(n)\)。

代码如下

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

【洛谷P2398】GCD SUM的更多相关文章

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

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

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

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

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

  6. P2398 GCD SUM

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

  7. 洛谷P2568 GCD(线性筛法)

    题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...

  8. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...

  9. 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)

    P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...

随机推荐

  1. 【Python】—— 获取函数内部变量名称

    原文出处: https://blog.csdn.net/maixiaochai/article/details/88693507 关键语句: func_vars = func.__code__.co_ ...

  2. [VBA]批量新建指定名称的工作表

    sub 批量新建指定名称的工作表() Dim i As Integer For i = 2 To 10    '根据实际情况修改i大小 Worksheets.Add after:=Worksheets ...

  3. Vue知识整理13:表单输入绑定(v-model)

    text:将输入框等表单,通过data变量实现数据绑定. textbox:数据绑定 3.checkbox和redio组件: 注意:data数据变量中,checkbox有可能会有多个结果,所以用数组: ...

  4. windows下 文件资源管理器 的操作

    alt + d 可以直接把光标移动到地址栏 shift + f10 可以触发右键, 后面就可以用键盘操作右键中的内容了 ( 如打开vscode alt + 空格 可以弹出窗口的菜单栏 ( 控制最大化 ...

  5. multiple datasource config

    Hi Harshit S. project structure: multiple datasource config as follows: step 1: step 2:add a datasou ...

  6. unittest单元测试1

    一个简单的单元测试例子#coding:utf-8from selenium import webdriverimport unittestclass Baidu(unittest.TestCase): ...

  7. Hello World!----html

    ​ 最近要做一个小网站,今晚想起来还是先看看前端终于抑制住惰性,开始看了. ​ 看了一下html,写了个hello world.老实讲,我竟然还有些小激动 ​ <html> <hea ...

  8. 应用安全 - CMS - Discuz漏洞汇总

    SSV-90861 Date:2012 类型:敏感信息泄露 影响范围:DZ x2.5  POC:http://www.xx.xx/uc_server/control/admin/db.php http ...

  9. Nginx/Nginx基础学习

    Nginx与node.js 一.Nginx与Node.js Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡. ...

  10. ipad已停用 连接itunes怎么办

    问题描述: ipad 开机密码多次输入出错后,提示 ipad已停用 连接itunes 解决方法: 参考: https://jingyan.baidu.com/article/fb48e8bee9ef4 ...