https://www.luogu.org/problemnew/show/P1390

求 $\sum\limits_{i=1}{n}\sum\limits_{j=1}{m} gcd(i,j) $

不会,看题解:

类似求gcd为p的求法:

$ f(n) = \sum\limits_{i=1}{n}\sum\limits_{j=1}{m} gcd(i,j) =\sum\limits_{i=1}^{N} d \sum\limits_{i=1}{n}\sum\limits_{j=1}{m} [gcd(i,j)==d] $

提出 \(d\) :

$ f(n) =\sum\limits_{i=1}^{N} d \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor }\sum\limits_{j=1}^{ \lfloor\frac{m}{d}\rfloor } [gcd(i,j)==1] $

用 $\sum\limits_{d|n}\mu(d)=[n==1] $ 替换,反演:

$ f(n) = \sum\limits_{i=1}^{N} d \sum\limits_{k=1}^{N} \mu(k) \lfloor\frac{n}{kd}\rfloor \lfloor\frac{m}{kd}\rfloor $

记 \(T=kd\) :

$ f(n) = \sum\limits_{T=1}^{N} \sum\limits_{d|T} d \mu(\frac{T}{d}) \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor $

提出 \(T\)

$ f(n) = \sum\limits_{T=1}^{N} \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor \sum\limits_{d|T} d \mu(\frac{T}{d}) $

因为:

$\sum\limits_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n} $

$ f(n) = \sum\limits_{T=1}^{N} \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor \varphi(T) $

#include<bits/stdc++.h>
using namespace std;
#define ll long long #define N 2000005
int phi[N],pri[N],cntpri=0;
bool notpri[N]; void sieve_phi(int n)
{
notpri[1]=phi[1]=1;
for (int i=2;i<=n;i++)
{
if (!notpri[i]) pri[++cntpri]=i,phi[i]=i-1;
for (int j=1;j<=cntpri&&i*pri[j]<=n;j++)
{
notpri[i*pri[j]]=1;
if (i%pri[j]) phi[i*pri[j]]=phi[i]*phi[pri[j]];
else {phi[i*pri[j]]=phi[i]*pri[j];break;}
}
}
} int main(){
int n;
cin>>n;
sieve_phi(n);
ll ans=0;
for(int i=1;i<=n;i++){
ans+=1ll*phi[i]*(n/i)*(n/i);
}
cout<<(ans-(1ll*(1+n)*n)/2)/2<<endl;
}

另一种奇怪的做法:

$ f(n) = \sum\limits_{d=1}^{n} d \sum\limits_{i=1}{n}\sum\limits_{j=1}{i-1} [gcd(i,j)==d] $

提d:

$ \sum\limits_{d=1}^{n} d \sum\limits_{i=1}{\frac{n}{d}}\sum\limits_{j=1}{i-1} [gcd(i,j)==1] $

后面是欧拉函数的定义:

$ \sum\limits_{d=1}^{n} d \sum\limits_{i=2}^{\frac{n}{d}} \varphi(i) $

这里有个bug是因为1和1互质但是1和1相同,所以要去掉 \(\varphi(1)\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long #define N 2000000+5 int phi[N],pri[N],cntpri=0;
bool notpri[N]; ll prefix[N]; void sieve_phi(int n) {
notpri[1]=phi[1]=1;
prefix[0]=0;
prefix[1]=1;
for(int i=2; i<=n; i++) {
if(!notpri[i])
pri[++cntpri]=i,phi[i]=i-1;
for(int j=1; j<=cntpri&&i*pri[j]<=n; j++) {
notpri[i*pri[j]]=1;
if(i%pri[j])
phi[i*pri[j]]=phi[i]*phi[pri[j]];
else {
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
}
prefix[i]=prefix[i-1]+phi[i];
}
} ll solve(ll n){
ll ans=0;
for(int d=1;d<=n;d++){
ans+=d*((prefix[n/d])-1);
}
return ans;
} int main() {
sieve_phi(2000000+1);
int n;
while(cin>>n) {
ll ans=solve(n);
cout<<ans<<endl;
}
}

洛谷 - P1390 - 公约数的和 - 莫比乌斯反演 - 欧拉函数的更多相关文章

  1. [洛谷P1390]公约数的和·莫比乌斯反演

    公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...

  2. $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数

    正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...

  3. [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

    题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算​$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...

  4. luogu2658 GCD(莫比乌斯反演/欧拉函数)

    link 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 (1)莫比乌斯反演法 发现就是YY的GCD,左转YY的GCD ...

  5. BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\gcd(i,n)\] \(Solution\) \[ \begin{aligned} \sum_{i=1}^n\gcd(i,n ...

  6. BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...

  7. BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)

    一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...

  8. HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解

    题意: 给定\(n,m,p\),求 \[\sum_{a=1}^n\sum_{b=1}^m\frac{\varphi(ab)}{\varphi(a)\varphi(b)}\mod p \] 思路: 由欧 ...

  9. hdu1695(莫比乌斯)或欧拉函数+容斥

    题意:求1-b和1-d之内各选一个数组成数对.问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数 ...

随机推荐

  1. PythonCookBook笔记——迭代器与生成器

    迭代器与生成器 迭代是Python最强大的功能之一,虽然看起来迭代只是处理序列中元素的一种方法,但不仅仅如此. 手动遍历迭代器 想遍历但不想使用for循环. 使用next()方法并在代码中捕获Stop ...

  2. html的dtd声明

    其实DOCTYPE声明,因为很多时候团队里没有做规范应该用哪个,而且几种不同的编辑工具新建出的html页面标准也不同:这就可能一个jsp页面写了几百行甚至上千行了,然后发现某个样式必须要改DOCTYP ...

  3. 用live555将内网摄像机视频推送到外网服务器,附源码

    最近很多人问,如何将内网的摄像机流媒体数据发布到公网,如果用公网与局域网间的端口映射方式太过麻烦,一个摄像机要做一组映射,而且不是每一个局域网都是有固定ip地址,即使外网主机配置好了每一个摄像机的映射 ...

  4. 九度OJ 1089:数字反转 (数字反转)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3059 解决:1678 题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个 ...

  5. eclipse调试第三方jar包需要源码的问题

    很多时候测试自己的jar包功能时,需要有一个测试工程导入该jar包,但是一般在调试的时候,需要跟进去看看步骤和逻辑是否正确,这个时候就需要在jar包的源码中下断点.最近刚好自己也会经常这样做,也遇到了 ...

  6. Perl 正则表达式语法

    1. 概要 Perl正则表达式是Boost.regex 默认行为,也可以将perl传入basic_regex 构造. boost::regex  e1(my_expression); boost::r ...

  7. appium(10)-iOS predictate

    iOS predictate It is worth looking at ’-ios uiautomation’ search strategy with Predicates. UIAutomat ...

  8. Codeforces Round #376 (Div. 2) A. Night at the Museum —— 循环轴

    题目链接: http://codeforces.com/contest/731/problem/A A. Night at the Museum time limit per test 1 secon ...

  9. 让Outlook一直保持开启

    1.将OutLook.exe注册为服务,让其一直保持开启状态 类似于TaobaoProtect.exe是由TBSecSvc服务启动的 http://stackoverflow.com/question ...

  10. <ZZ>linux yum命令详解

    http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html yum(全称为 Yellow dog Updater, Modified)是 ...