洛谷 P1447 [NOI2010]能量采集 (莫比乌斯反演)
题意:问题可以转化成求$\sum_{i=1}^{n}\sum_{j=1}^{m}(2*gcd(i,j)-1)$
将2和-1提出来可以得到:$2*\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)-n*m$
令Ans=$\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)$
=$\sum_{d=1}^{n}d\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==d]$
=$\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\mu(i){\lfloor \frac{n}{id}\rfloor}{\lfloor \frac{m}{id}\rfloor}$
枚举id,Ans=$\sum_{T=1}^{n}{\lfloor \frac{n}{T}\rfloor}{\lfloor \frac{m}{T}\rfloor}\sum_{d|T}\mu(d)\frac{T}{d}$
后面这个求和正好是狄利克雷卷积形式,更巧的是$\mu*id=\varphi$。
Ans=$\sum_{T=1}^{n}{\lfloor \frac{n}{T}\rfloor}{\lfloor \frac{m}{T}\rfloor}\varphi (T)$
输出2*Ans-n*m即可。
预处理欧拉函数前缀和,另一部分整除分块。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+;
bool p[N];
int pri[N],phi[N],tot;
ll pre[N];
void init() {
phi[]=;
for(int i=;i<N;i++) {
if(!p[i]) pri[tot++]=i,phi[i]=i-;
for(int j=;j<tot&&i*pri[j]<N;j++) {
p[i*pri[j]]=true;
if(i%pri[j]==) {
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*phi[pri[j]];
}
}
for(int i=;i<N;i++) pre[i]=pre[i-]+phi[i];
}
int main() {
init();
int n,m;
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);
ll ans=;
for(int l=,r;l<=n;l=r+) {
r=min(n/(n/l),m/(m/l));
ans+=1LL*(pre[r]-pre[l-])*(n/l)*(m/l);
}
printf("%lld\n",*ans-1LL*n*m);
return ;
}
洛谷 P1447 [NOI2010]能量采集 (莫比乌斯反演)的更多相关文章
- 洛谷P1447 - [NOI2010]能量采集
Portal Description 给出\(n,m(n,m\leq10^5),\)计算\[ \sum_{i=1}^n \sum_{j=1}^m (2gcd(i,j)-1)\] Solution 简单 ...
- 洛谷 P2158 [SDOI2008]仪仗队 && 洛谷 P1447 [NOI2010]能量采集
https://www.luogu.org/problemnew/show/P2158 以人所在位置为(0,0)建立坐标系, 显然除了(0,1)和(1,0)外,可以只在坐标(x,y)的gcd(x,y) ...
- 洛谷P1447 [NOI2010]能量采集(容斥)
传送门 很明显题目要求的东西可以写成$\sum_{i=1}^{n}\sum_{j=1}^m gcd(i,j)*2-1$(一点都不明显) 如果直接枚举肯定爆炸 那么我们设$f[i]$表示存在公因数$i$ ...
- luogu1447 [NOI2010]能量采集 莫比乌斯反演
link 冬令营考炸了,我这个菜鸡只好颓废数学题了 NOI2010能量采集 由题意可以写出式子: \(\sum_{i=1}^n\sum_{j=1}^m(2\gcd(i,j)-1)\) \(=2\sum ...
- BZOJ2005: [Noi2010]能量采集 莫比乌斯反演的另一种方法——nlogn筛
分析:http://www.cnblogs.com/huhuuu/archive/2011/11/25/2263803.html 注:从这个题收获了两点 1,第一象限(x,y)到(0,0)的线段上整点 ...
- BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- 洛谷 1447 [NOI2010]能量采集——容斥/推式子
题目:https://www.luogu.org/problemnew/show/P1447 1.容斥原理 求 f [ i ] 表示 gcd==i 的对数,先 f [ i ] = (n/i) * (m ...
- BZOJ 2005: [Noi2010]能量采集 [莫比乌斯反演]
题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
随机推荐
- 关于mybatis-config.xml文件的基础解释
今天是我第一天落户博客园,想一想从mybatis框架开始写起吧.mybatis框架与Hibernate框架相比来说,专注于SQL语句,对SQL语句的要求比较高吧. 我觉得,对于mybatis框架来说, ...
- java 异常捕获小记
java 中异常捕获常用的为: try{ //业务代码 }catch(Exception e){ //异常捕获 }finally{ // 不管有无异常, 最后都会执行到这里 } 在方法体内如果想要把异 ...
- leetcode 699. Falling Squares 线段树的实现
线段树实现.很多细节值得品味 都在注释里面了 class SegTree: def __init__(self,N,query_fn,update_fn): self.tree=[0]*(2*N+2) ...
- Simple implementation and results of genetic algorithm.
This experiment was done for the final assignment of my Professional English class. This part has be ...
- numpy库数组属性查看:类型、尺寸、形状、维度
import numpy as np q = np.array([1,2,3,4],dtype=np.complex128) print("数据类型",type(q)) ...
- iview 小问题笔记
总结一下用 iview 组件期间遇到的小问题.一边做项目一边做笔记. 官方文档:iview API 按需引入: 1,iview 分页组件 <Page :total="aboutPage ...
- 使用uni-app(Vue.js)创建运行微信小程序项目步骤
使用uni-app(Vue.js)开发微信小程序项目步骤 1. 新建一个uni-app项目 创建完成后的目录结构 2. 打开微信小程序开发工具端的端口调试功能 3. 运行创建的项目 效果
- echarts--例子
echarts使用例子: <script type="text/javascript"> option = { title : {'x': 'center','y':' ...
- LTIME16小结(CodeChef)
题目链接 最后一题是Splay...还没有学会..蒟蒻!!! A /****************************************************************** ...
- mit课程ocw-mathematics
https://ocw.mit.edu/courses/find-by-topic/#cat=mathematics Course # Course Title Level 1.010 Uncerta ...