洛谷 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 ...
随机推荐
- C#通过鼠标点击panel移动来控制无边框窗体移动
Point point = , -); bool mouseDown = false; private void panelEx5_MouseDown(object sender, MouseEven ...
- 入门servlet:request获取请求头数据
@WebServlet("/RequestDemo2") public class RequestDemo2 extends HttpServlet { protected voi ...
- Leetcode589.N-ary Tree Preorder TraversalN叉树的前序遍历
给定一个 N 叉树,返回其节点值的前序遍历. class Node { public: int val; vector<Node*> children; Node() {} Node(in ...
- 删除n天前的文件或文件夹 bat批处理
@echo off @echo deleting... FORFILES /p "D:\a" /D -1 /C "cmd /c echo deleting @file . ...
- Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆
# gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...
- HDU4355 三分查找
/* * 三分查找 */ #include<cstdio> #include<cmath> #define eps 1e-6 //typedef __int64 LL; i ...
- 备忘 ubuntu ip 及 dns 的坑
以前都用 ubuntu 16.04 现在用 18.04 遇到几个恶心的事,现在解决了,记录下来. 1. 设置 DNS , DNS 设置老是不对,最后发现问题老版本 ubuntu 17.10以下 ...
- wpf icommand 命令接口
- Asp.Net Core2.0在linux下发布
一.在linux上新建mvc项目发布 可以参考:https://segmentfault.com/a/1190000012428781 也可以看微软官方文档. 大致步骤如下: 1.在linux下安装. ...
- 【洛谷P2907】 【USACO08OPEN】农场周围的道路 水模拟分治
P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm 题目描述 Farmer John's cows have taken an interest in ex ...