解题:洛谷2257 YY的GCD
初见莫比乌斯反演
有一个套路是关于GCD的反演经常设$f(d)=\sum_{gcd(i,j)==d},g(d)=\sum_{d|gcd(i,j)}$,然后推推推
$\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==prime]$
$\sum_{p∈prime}f(p)$
$\sum_{p∈prime} \sum_{d=1}^{min(n,m)} [p|d] μ(\frac{d}{p})g(d)$
套路的,改为枚举$\frac{d}{p}$
$\sum_{p∈prime} \sum_{d=1}^{min(\left\lfloor\frac{n}{p}\right\rfloor,\left\lfloor\frac{m}{p}\right\rfloor)}μ(d)g(dp)$
这时候可以换掉$g$了
$\sum_{p∈prime} \sum_{d=1}^{min(\left\lfloor\frac{n}{p}\right\rfloor,\left\lfloor\frac{m}{p}\right\rfloor)}μ(d)\left\lfloor\frac{n}{dp}\right\rfloor\left\lfloor\frac{m}{dp}\right\rfloor$
然后换回枚举现在的$dp$(即原来的$d$),交换求和号
$\sum\limits_{i=1}^{min(n,m)}\sum_{d|i\&\&d∈prime}μ(\frac{i}{d})\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{i}\right\rfloor$
$\sum\limits_{i=1}^{min(n,m)}\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{i}\right\rfloor\sum_{d|i\&\&d∈prime}μ(\frac{i}{d})$
于是数论分块,前面的直接算,后面的线性筛之后$O(n\log n)$预处理一下再做个前缀和
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int npr[N],pri[N],mul[N];
long long mulsum[N],ans;
int T,n,m,nm,cnt,maxx;
void prework()
{
register int i,j;
mul[]=,npr[]=true,maxx=;
for(i=;i<=maxx;i++)
{
if(!npr[i]) pri[++cnt]=i,mul[i]=-;
for(j=;j<=cnt&&1ll*i*pri[j]<=maxx;j++)
{
npr[i*pri[j]]=true;
if(i%pri[j]==) break;
else mul[i*pri[j]]=-mul[i];
}
}
for(i=;i<=maxx;i++)
for(j=;j<=cnt&&1ll*i*pri[j]<=maxx;j++)
mulsum[i*pri[j]]+=mul[i];
for(i=;i<=maxx;i++) mulsum[i]+=mulsum[i-];
}
int main()
{
register int i,j;
scanf("%d",&T),prework();
while(T--)
{
scanf("%d%d",&n,&m),ans=,nm=min(n,m);
for(i=;i<=nm;i=j+)
{
j=min(n/(n/i),m/(m/i));
ans+=(mulsum[j]-mulsum[i-])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return ;
}
解题:洛谷2257 YY的GCD的更多相关文章
- [洛谷2257]YY的GCD 题解
整理题目转化为数学语言 题目要我们求: \[\sum_{i=1}^n\sum_{i=1}^m[gcd(i,j)=p]\] 其中 \[p\in\text{质数集合}\] 这样表示显然不是很好,所以我们需 ...
- 洛谷 2257 - YY的GCD
莫比乌斯反演半模板题 很容易可以得到 \[Ans = \sum\limits_{p \in prime} \sum\limits_{d = 1}^{\min (\left\lfloor\frac{a} ...
- 洛谷 P2257 YY的GCD
洛谷 P2257 YY的GCD \(solution:\) 这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路. 我们可以列出答案就是要我们求: \(ans ...
- 洛谷 P2257 YY的GCD 题解
原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...
- 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- 洛谷P2257 YY的GCD
今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...
- 洛谷P2257 YY的GCD(莫比乌斯反演)
传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...
- 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块
https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...
随机推荐
- 初学node.js-nodejs中实现HTTP服务(3)
一.node.js实现服务端 创建hello-world-server.js文件,服务端源码如下: /** * node.js实现http服务端 */ var http = require('http ...
- 团队项目--NABCD模型
蹭课神器 N(need需求) 每个人的兴趣都不一样,或许你很喜欢自己的专业,并且想再进一步学习专业知识:或许你不是太喜欢自己的专业,想上一些自己感兴趣的课程:但是,当你想上你所钟 意的课时,却发现自己 ...
- 软工1816 · Beta冲刺(2/7)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成考试 确定历史记录页面与排行榜页面的前端页面风格 接下来的计划 & ...
- <s:action>的一些用法
Action标签,顾名思义,是用来调用Action的标签,在JSP中页面中,可以具体指定某一命名空间中的某一Action.而标签的主体用于显示及渲染Actionr的处理结果. action标签有如下几 ...
- 【搜索】POJ-2718 全排列+暴力
一.题目 Description Given a number of distinct decimal digits, you can form one integer by choosing a n ...
- vs2010调试-尝试调试dll源码。
第一步: 打开“调试”——“选项和设置”——点击调试下“常规”——设置启用“启用.NET Framework源代码单步执行 ” 第二步 选择“符号”——选择Microsoft符号服务器——设置符号缓存 ...
- python learning2.py
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] # 取前3个元素的笨方法 r = [] n = 3 for i in range(n): r.appe ...
- 安装/卸载 修改Config
参考地址:https://docs.microsoft.com/zh-cn/nuget/create-packages/source-and-config-file-transformations
- 解决vsftp无法上传文件及文件夹的问题
因为搞hadoop的缘故,考虑到启动linux桌面会给电脑带来比较卡..所以就将图形界面的启动给关闭,完全在命令的模式下使用linux. 使用yum搭建了ftp服务..yum的使用参考:http:// ...
- 3 vue-router 的默认hash 改mode:history去除#号 传参
npm install vue-router --save //安装 传参