[洛谷P1390]公约数的和·莫比乌斯反演
公约数的和
放在这么前面的位置当然是给自己看的!!!!!

这一步原来是这么推过来的!如果下次再忘了怎么推可以这么搞出来或者直接记结论
分析
这道题很显然答案为
\]
//其中\((i,j)\)意味\(gcd(i,j)\)
这样做起来很烦,看起来是\(O(N^2)\)的辣鸡复杂度,我们考虑这个问题的弱化版
求$$\sum_{i=1}n\sum_{j=1}n(i,j)$$
然后通过一些优美的容斥就可以算出原答案
现在我们设$$f(d)=\sum_{i=1}n\sum_{j=1}n[(i,j)=d]$$
这个式子表示,在\(i=1..n,j=1..n,gcd(i,j)=d\)的个数,其中\([]\)内成立,返回值为\(1\),否则为\(0\)
我们令
\]
则有
\]
考虑\(Ans\)
\]
\]
\]
考虑把\(f(d)\)的式子带入,这时我们不枚举\(d\)的倍数具体是多少,而是枚举倍数(不枚举\(d|n\)的\(n\),而是枚举\(\frac n d\),比如说我们用\(k\)表示,就有
\]
这个\(dk\)感觉不是很舒服,我们令\(t=dk,将枚举d改为枚举dk,则有\)
\]
观察$$\sum_{k|t} k\mu(\frac{t}{k})$$
我们发现这是在前文提及的狄利克雷卷积
\]
(忘了的话戳这里)
本篇·莫比乌斯反演
那么原式就优美的化简为
\]
这样一个式子已经可以\(O(N)\)地解决了,更优美地也可以进行整除分块,做到计算\(\sqrt{n}\)
关于最前面的容斥,只需要减去\(gcd(i,i)=i\)和\(gcd(i,j)=gcd(j,i)\)的情况就可以
对于\(gcd(i,i)=i\)的情况,考虑在\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\)中,对于每个\(i\),有且仅有\(1\)个\(j=i\)对应,此时的贡献为\(i\),所以总贡献为
\(\sum_{i=1}^N i=N(N+1)/2\)
而\(gcd(i,j)=gcd(j,i)\)的情况,去掉情况\(1\)后显然这两个对半分,只要\(/2\)即可
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=2000010;
LL sum[maxn];
int vis[maxn],phi[maxn],pri[maxn];
int cnt=0,n;
inline void getphi(int n){
memset(vis,0,sizeof(vis));phi[1]=vis[1]=1;
for (int i=2;i<=n;i++){
if (!vis[i]){pri[++cnt]=i;phi[i]=i-1;}
for (int j=1;j<=cnt&&(LL)i*pri[j]<=n;j++){
vis[i*pri[j]]=1;
if (i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}
else phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
for (int i=1;i<=n;i++) sum[i]=sum[i-1]+phi[i];
}
int main(){
scanf("%d",&n);
getphi(n);
LL ans=0;
for (int l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=(LL)(sum[r]-sum[l-1])*(n/l)*(n/l);
}
printf("%lld",(ans-(LL)n*(n+1)/2)/2);
return 0;
}
[洛谷P1390]公约数的和·莫比乌斯反演的更多相关文章
- 洛谷 - P1390 - 公约数的和 - 莫比乌斯反演 - 欧拉函数
https://www.luogu.org/problemnew/show/P1390 求 $\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} gcd(i,j) $ ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
- 洛谷 - SP3871 GCDEX - GCD Extreme - 莫比乌斯反演
易得 $\sum\limits_{g=1}^{n} g \sum\limits_{k=1}^{n} \mu(k) \lfloor\frac{n}{gk}\rfloor \lfloor\frac{n}{ ...
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 洛谷P1390 公约数的和 [2017年6月计划 数论12]
P1390 公约数的和 题目描述 有一天,TIBBAR和LXL比赛谁先算出1~N这N个数中每任意两个不同的数的最大公约数的和.LXL还在敲一个复杂而冗长的程序,争取能在100s内出解.而TIBBAR则 ...
- 洛谷P3455 [POI2007]ZAP-Queries (莫比乌斯反演)
题意:求$\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)==d]$(1<=a,b,d<=50000). 很套路的莫比乌斯反演. $\sum_{i=1}^{n}\ ...
随机推荐
- Java - > for, while 及 do.while循环
为什么要用到循环结构: 按顺序结构执行程序语句(方法或者代码块)只能被执行一次.如果要多次执行,就需要使用到循环结构(循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构) 布尔表达式:是一段 ...
- Redis的Set数据类型
Sets 就是一个集合,集合的概念就是一堆不重复值的组合.利用Redis提供的Sets数据结构,可以存储一些集合性的数据,比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一 ...
- 论文投稿Cover letter
转自:http://blog.sciencenet.cn/blog-479412-686426.html,感谢分享! 1.第一次投稿Cover letter:主要任务是介绍文章主要创新以及声明没有一稿 ...
- requireJS的优化工具 ---- r.js
requireJS是javascript的模块加载器,是基于AMD规范实现的. r.js是其提供的对模块进行打包和构建的一个工具 下载 r.js 创建r.js 的配置文件 build.js build ...
- mvc页面间的传值
本文大致讲解mvc前后端的传值方式,包括control向view.view向control.以及action向action. 回顾 我们回顾下在ASP.NET WebForms中,页面之间最常用的传值 ...
- html-表单的设计
一.表单的设计 1.注册表单页面 <html> <head> <title>表单的练习</title> <script> function ...
- apache-实战(二)
Apache 虚拟主机 --用apache或nginx就可以做 一台服务器跑多台web服务 VPS virtual private server 虚拟专用服务器 --使用虚拟化技术来做 云服务器 虚拟 ...
- 给Sublime text 3增加选中当前单词快捷键
1.录制一份macro caret on a word –> ctrl+left –> ctrl+shift+right 2.将录制好的macro保存为select_current_wor ...
- Orchard Core 文档翻译 (七)Contents
CMS Modules »Contents Contents (OrchardCore.Contents) 此模块提供内容管理服务. Liquid 您可以使用“content ”属性从liquid 视 ...
- 关于selenium无法定位动态元素的解决方法
今天在写一个关于登录的自动化脚本时,在对元素定位时总会报下面的错: