洛谷 - P1390 - 公约数的和 - 莫比乌斯反演 - 欧拉函数
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 - 公约数的和 - 莫比乌斯反演 - 欧拉函数的更多相关文章
- [洛谷P1390]公约数的和·莫比乌斯反演
公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...
- $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数
正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...
- [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...
- luogu2658 GCD(莫比乌斯反演/欧拉函数)
link 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 (1)莫比乌斯反演法 发现就是YY的GCD,左转YY的GCD ...
- BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)
题目链接 \(Description\) 求\[\sum_{i=1}^n\gcd(i,n)\] \(Solution\) \[ \begin{aligned} \sum_{i=1}^n\gcd(i,n ...
- BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)
一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...
- HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解
题意: 给定\(n,m,p\),求 \[\sum_{a=1}^n\sum_{b=1}^m\frac{\varphi(ab)}{\varphi(a)\varphi(b)}\mod p \] 思路: 由欧 ...
- hdu1695(莫比乌斯)或欧拉函数+容斥
题意:求1-b和1-d之内各选一个数组成数对.问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数 ...
随机推荐
- IntelliJ IDEA配置Tomcat及部署项目
IntelliJ IDEA配置Tomcat及部署项目(原链接) 主要有以下几个要点 1.选择本地的tomcat容器. 2.可以选择修改访问路径. 3.On Update action 当我们按 Ctr ...
- Spring源码学习(一)资源加载
这里先从最简单的一个Spring例子开始. 下面是Spring的context的配置 <?xml version="1.0" encoding="UTF-8&quo ...
- hdu1878欧拉回路(DFS+欧拉回路)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 游戏开发之基础图像---3d图像处理
http://dev.gameres.com/Program/Visual/3D/3Darit.htm float 类型数据有效数字是小数点后面6位 单精度 doluble 类型数据是至少10位,双精 ...
- ContentPresenter理解
这是2年前写了一篇文章 http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html 我们先来看M ...
- 监控hadoop任务结果shell脚本
需求:每日hadoop结果文件中,找出数据不完整的日期和没有跑出数据的日期,重新进行跑hadoop任务 分析:在result/目录生成的文件中数据有2个特点 第一:日期有,但是数据不完整 第二:日期对 ...
- Ubuntu上Eclipse安装PyDev方法和配置
Ubuntu11.10中Eclipse安装PyDev插件方法 PyDev是Eclipse中用来开发python的一个插件,个人比较喜欢,下面介绍在Ubuntu下安装这个插件的方法.(在Windows下 ...
- 当半导体的工艺制程走到7nm后
https://mp.weixin.qq.com/s/LjFTtEKFX2o8kLjn3y6GbQ 深度学习的异构加速技术1:效率因通用而怠,构架为AI而生 一方面,当半导体的工艺制程走到7nm后,已 ...
- EL表达式 介绍
EL表达式 1.EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一 ...
- Decorator Pattern
1.Decorator 模式通过组合的方式提供了一种给类增加职责(操作)的方法. 2.Decorator模式结构图 3.实现 #ifndef _DECORATOR_H_ #define _DECORA ...