BZOJ 2820 luogu 2257 yy的gcd (莫比乌斯反演)
题目大意:求$gcd(i,j)==k,i\in[1,n],j\in[1,m] ,k\in prime,n,m<=10^{7}$的有序数对个数,不超过10^{4}次询问
莫比乌斯反演入门题
为方便表述,由于n和m等价,以下内容均默认n<=m
题目让我们求:$\sum_{k=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==k]$
容易变形为:$\sum_{k=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}[gcd(i,j)==1]$
很显然$gcd(i,j)==1$这个东西不太好处理,因为它是最大公约数,直接统计gcd的数量很困难
所以,根据莫比乌斯反演的常规套路:
把$gcd(i,j)==1$变形为$\sum _{d|gcd(i,j)}\mu(d)$
可得$\sum_{k=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}\sum _{d|gcd(i,j)}\mu(d)$
此时,统计$d$的数量就很容易了,即$\left \lfloor \frac{n}{k} \right \rfloor\cdot \left \lfloor \frac{m}{k} \right \rfloor$,数学含义是"[1,n]中能整除d的数的数量*[1,m]中能整除d的数的数量"
继续变形$\sum_{k=1}^{n}\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\left \lfloor \frac{n}{kd} \right \rfloor \cdot \left \lfloor \frac{m}{kd} \right \rfloor\cdot \mu(d)$
我们看kd这个东西很不爽,把它换掉,令Q=kd
$\sum_{Q}^{n}\left \lfloor \frac{n}{Q} \right \rfloor \cdot \left \lfloor \frac{m}{Q} \right \rfloor\cdot \sum_{k|Q,k\in prime}\mu(\frac{Q}{k})$
$\sum_{k|Q,k\in prime}\mu(\frac{Q}{k})$可以用线性筛筛出,将其命名为$g(i)$,再维护一个前缀和
在线性筛内分三种情况讨论,对于数i,我们遍历到了一个质数$p$,$i$中$p$的幂次为$k$
$k=0$,$i$中不含$p$,根据莫比乌斯函数的性质,$g(i\cdot p)=-g(i)+\mu(i)$,即$g/i$的部分全都反过来,再加上$p$带来的贡献
$k=1$,$i$中含一个$p$,那么在$p$加入后,除了$p$的其它质因子的贡献全部为0,仅计算$p$的贡献,即$g(i\cdot p)=g(i)$
$k>=2$,$i$中含两个$p$,加入$p$后,所有质因子的贡献均为0
而$\sum_{Q}^{n}\left \lfloor \frac{n}{Q} \right \rfloor \cdot \left \lfloor \frac{m}{Q} \right \rfloor$可以使用整除分块(套路的味道)在$O(\sqrt n)$的时间内算出来,再用前缀和统计即可
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10010000
#define maxn 10000000
#define ll long long
using namespace std; int T,n,m,cnt;
int mu[N],pr[N],use[N],qm[N];
int pm[N]; void Pre()
{
mu[]=,qm[]=;
for(int i=;i<=maxn;i++)
{
if(!use[i]) pr[++cnt]=i,mu[i]=-,qm[i]=;
for(int j=;j<=cnt&&i*pr[j]<=maxn;j++){
use[i*pr[j]]=;
if(i%pr[j]==){
mu[i*pr[j]]=;
if((i/pr[j])%pr[j]==) qm[i*pr[j]]=;
else qm[i*pr[j]]=mu[i];
break;
}else{
mu[i*pr[j]]=-mu[i];
qm[i*pr[j]]=-qm[i]+mu[i];
}
}
}
for(int i=;i<=maxn;i++)
pm[i]=pm[i-]+qm[i];
}
ll solve(int n,int m)
{
ll ans=;//int nd,md;
for(int i=,la,mi=min(n,m);i<=mi;i=la+)
{
la=min(n/(n/i),m/(m/i));
ans+=1ll*(n/i)*(m/i)*(pm[la]-pm[i-]);
}
return ans;
}
int main()
{
scanf("%d",&T);
Pre();
for(int t=;t<=T;t++)
{
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);
printf("%lld\n",solve(n,m));
}
return ;
}
BZOJ 2820 luogu 2257 yy的gcd (莫比乌斯反演)的更多相关文章
- Luogu P2257 YY的GCD 莫比乌斯反演
第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...
- [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)
[BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...
- [Luogu P2257] YY的GCD (莫比乌斯函数)
题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1624 Solved: 853[Submit][Status][Discu ...
- bzoj 2820 YY的GCD 莫比乌斯反演
题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- 【BZOJ2820】YY的GCD [莫比乌斯反演]
YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 求1<=x<=N, ...
随机推荐
- ZOJ 3874 Permutation Graph (分治NTT优化DP)
题面:vjudge传送门 ZOJ传送门 题目大意:给你一个排列,如果两个数构成了逆序对,就在他们之间连一条无向边,这样很多数会构成一个联通块.现在给出联通块内点的编号,求所有可能的排列数 推来推去容易 ...
- MySQL SQL模式特点汇总
前言 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值.DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且 ...
- 建议53:用状态模式美化代码,关于python-state工具包的理解
在<编写高质量代码:改善python程序的91个建议>的建议53:用状态模式美化代码小节中,介绍了状态模式例如以下:就是当一个对象的内在状态改变时,同意改变其行为,但这个对象看起来 ...
- 解决Unity的 The file 'MemoryStream' is corrupted! Remove it and launch 崩溃问题
孙广东 2015.7.30 问题: 在项目平时删除资源或者脚本资源时产生的prefab的脚本引用丢失,特别是在场景scene中丢了解决方式/// 1.又一次Clone项目/// 2.删除项目的 ...
- 经常使用的MySQL语句整理
本文參考:http://www.blogjava.net/bolo 部分自己补充,长期更新 MySQL的SQL语句写法,除了那些主要的之外,另一些也算比較经常使用的,这里记录下来,以便以后查找. 好记 ...
- 【Android 系统开发】使用 Source InSight 阅读 Android 源代码
1. 安装 Source Insight (1) Source Insight 相关资源 安装相关资源 : -- 下载地址 : http://www.sourceinsight.com/down35. ...
- (LeetCode)二叉树中和为某一值的路径
原体例如以下: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addin ...
- lightoj--1294--Positive Negative Sign(水题,规律)
Positive Negative Sign Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu ...
- 37.Qt网络与通信
1 获取本机网络与通信 在网络应用中,经常需要获得本机的主机名.IP地址和硬件地址等网络信息.运用QHostInfo,QNetWorkInterface,QNetworkAddressEntry可获得 ...
- APNs推送
消息推送是可以指定声音的.譬如你可以对正面的反馈使用欢快的声音,对负面的反馈使用低沉一点的声音,都可以达到别出心裁让人眼前一亮的目的.你需要先放一些aiff.wav或者caf音频文件到app的资源文件 ...