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
输出格式:
sum
输入输出样例
输入样例#1:
复制
2
输出样例#1:
复制
5
说明
数据范围 30% n<=3000 60% 7000<=n<=7100 100% n<=100000
题解
这东西其实就是\(\large\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\)
但是这个求和并不好搞,我们可以转化一下变成\(\large[gcd(i,j)=k]\)的类似形式
然后可以用莫比乌斯函数的性质来搞,也可以反演
因为不会反演,所以就放一个用性质的推导(这里的除法都是整除)
\begin{align*}
&\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\\
&=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^n{[gcd(i,j)=d]}\\
&=\sum_{d=1}^nd\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}{[gcd(i,j)=1]}\\
&=\sum_{d=1}^nd\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}\sum_{k|gcd(i,j)}\mu(k)\\
&=\sum_{d=1}^nd\sum_{k=1}^{n/d}\sum_{i=1}^{n/d/k}\sum_{j=1}^{n/d/k}\mu(k)*(n/d/k)^2\\
\end{align*}
}
\]
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
int p[N], mu[N], vis[N], sum[N];
int n, cnt = 0;
ll ans = 0;
void init() {
mu[1] = 1;
for(int i = 2; i < N; ++i) {
if(!vis[i]) {p[++cnt] = i; mu[i] = -1;}
for(int j = 1; j <= cnt && p[j] * i < N; ++j) {
vis[p[j] * i] = 1;
if(i % p[j] == 0) break;
mu[i * p[j]] -= mu[i];
}
}
for(int i = 1; i < N; ++i) sum[i] = sum[i - 1] + mu[i];
}
ll calc(int n) {
ll s = 0;
for(int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
s += (ll)((ll)(n/l) * (ll)(n/l) * (ll)(sum[r] - sum[l - 1]));
}
return s;
}
int main() {
init();
scanf("%d", &n);
for(int d = 1; d <= n; ++d) {
ans += 1ll * d * calc(n / d);
}
printf("%lld\n", ans);
}
LuoguP2398 GCD SUM的更多相关文章
- luoguP2398 GCD SUM [gcd]
题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum ...
- acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy
GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...
- 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\) 数论 先常规化式子(大雾 \[ ...
- bnu——GCD SUM (莫比乌斯反演)
题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 #include<stdio.h& ...
- 洛谷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的最大公约数. 输入输出格式 输入 ...
- 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}{ ...
随机推荐
- django后台将最新文章显示在前面
在你定义的views.py中修改 Models.objects.order_by("-pub_date") 更据时间排列 Models.objects.order_by(&q ...
- python2.7之乱码问题
python 3之后当然不存在乱码问题了.python 2的乱码问题有时就有点头疼了.(代码均为在windows下测试) 示例:保存为test1.py 报错信息如下: 解决办法: 我将代码保存为tes ...
- GCD (RMQ + 二分)
RMQ存的是区间GCD,然后遍历 i: 1->n, 然后不断地对[i, R]区间进行二分求以i为起点的相同gcd的区间范围,慢慢缩减区间. #include<bits/stdc++.h&g ...
- uvalive 3415 Guardian Of Decency
题意: 有一个老师想组织学生出去旅游,为了避免他们之间有情侣产生,他制定了一系列的条件,满足这些条件之一,那么这些人理论上就不会成为情侣: 身高相差40cm:性别相同:喜欢的音乐风格不同:最喜欢的运动 ...
- video control
function VideoControls(option){ this.id = option.videoId; this.videoId = document.getElementsByTagNa ...
- Django后端项目----RESTful API
一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...
- 金九银十跳槽季,程序员面试点解析之Java专场
前言 近年来Java工程师这个岗位炙手可热,市场需求大,学习Java的人也越来越多,所以IT企业与求职者的选择都比较多,那么IT企业在面试时都会提哪些问题呢.下面为大家分享 Java高级工程师面试阿里 ...
- css相关知识点
一.CSS的引入方式 1.1 css的介绍 HTML:超文本标记语言.从语义的角度描述页面结构. CSS:层叠样式表.从审美的角度负责页面样式. JS:JavaScript .从交互的角度描述页面行为 ...
- 知乎上一个比较好的学习QT的公众号<<跟小豆君学Qt>>
公众号网址:https://zhuanlan.zhihu.com/p/28472916
- SVN的标准目录结构
SVN目录规范 在visualSVN中创建仓库时,可以选择svn目录结构 Trunk主干目录,此目录下的文件为基准文件. Brancher 用于开发的分支目录 Tags用于发布的版本目录 假设有一个项 ...