莫比乌斯反演第一题。莫比乌斯反演入门

数论题不多BB,直接推导吧。

首先,发现题目所求\(ans=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=prime]\)

考虑反演,我们令\(f(d)\)为\(\gcd(i,j)(i\in[1,n],j\in[1,m])=d\)的个数,\(F(n)\)为\(d|\gcd(i,j)\)的个数

即:

\[f(d)=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=d]
\]

\[F(s)=\sum_{s|d}f(d)=\lfloor\frac{n}{s} \rfloor \lfloor\frac{m}{s} \rfloor
\]

根据莫比乌斯反演定理,有:

\[f(n)=\sum_{n|d} \mu(\lfloor\frac{d}{n} \rfloor)F(d)
\]

所以开始化简,原式:

\[ans=\sum_{p\in prime} \sum_{i=1}^n \sum_{j=1}^m[\gcd(i,j)=p]
\]

后面那个就是我们设的\(f(p)\),所以我们带入得:

\[ans=\sum_{p\in prime} f(p)
\]

用上面的公式反演一下:

\[ans=\sum_{p\in prime} \sum_{p|d}\mu(\lfloor\frac{d}{p} \rfloor)F(d)
\]

这个不好处理,我们考虑把枚举\(p\)变成枚举\(\lfloor\frac{d}{p} \rfloor\),则有:

\[ans=\sum_{p\in prime} \sum_{d=1}^{\min(\lfloor\frac{n}{p} \rfloor,\lfloor\frac{m}{p} \rfloor)}\mu(d)F(d\cdot p)
\]

再根据\(F(s)\)的性质代进去就有:

\[ans=\sum_{p\in prime} \sum_{d=1}^{\min(\lfloor\frac{n}{p} \rfloor,\lfloor\frac{m}{p} \rfloor)}\mu(d)\lfloor\frac{n}{d\cdot p} \rfloor\lfloor\frac{m}{d\cdot p} \rfloor
\]

然后我们用\(T\)换掉\(d\cdot p\),则有:

\[ans=\sum_{T=1}^{\min(n,m)} \sum_{p|T,p\in prime} \mu(\lfloor\frac{T}{p} \rfloor)\lfloor\frac{n}{T} \rfloor\lfloor\frac{m}{T} \rfloor
\]

把\(\lfloor\frac{n}{T} \rfloor\lfloor\frac{m}{T} \rfloor\)提到前面来就有:

\[ans=\sum_{T=1}^{\min(n,m)} \lfloor\frac{n}{T} \rfloor\lfloor\frac{m}{T} \rfloor\sum_{p|T,p\in prime} \mu(\lfloor\frac{T}{p} \rfloor)
\]

然后我们发现这个式子就是\(O(n)\)的了,一看题目,多组询问!

结果还是套路,看到那个\(\lfloor\frac{n}{T} \rfloor\lfloor\frac{m}{T} \rfloor\)发现可以除法分块搞。

后面的式子稍加分析可以发现在筛法结束后枚举每个素数,再枚举\(\lfloor\frac{T}{p} \rfloor\)来统计。最后做一个前缀和即可。

CODE

#include<cstdio>
#include<cctype>
#define RI register int
using namespace std;
const int P=10000000;
int t,n,m,prime[P+5],cnt,miu[P+5]; long long sum[P+5],ans; bool vis[P+5];
class FileInputOutput
{
private:
#define tc() (A==B&&(B=(A=Fin)+fread(Fin,1,S,stdin),A==B)?EOF:*A++)
#define pc(ch) (Ftop<S?Fout[Ftop++]=ch:(fwrite(Fout,1,S,stdout),Fout[(Ftop=0)++]=ch))
#define S 1<<21
char Fin[S],Fout[S],*A,*B; int Ftop,pt[25];
public:
FileInputOutput() { A=B=Fin; Ftop=0; }
inline void read(int &x)
{
x=0; char ch; int flag=1; while (!isdigit(ch=tc())) flag=ch^'-'?1:-1;
while (x=(x<<3)+(x<<1)+(ch&15),isdigit(ch=tc())); x*=flag;
}
inline void write(long long x)
{
if (!x) return (void)(pc(48),pc('\n')); RI ptop=0;
while (x) pt[++ptop]=x%10,x/=10; while (ptop) pc(pt[ptop--]+48); pc('\n');
}
inline void Fend(void)
{
fwrite(Fout,1,Ftop,stdout);
}
#undef tc
#undef pc
#undef S
}F;
#define Pi prime[j]
inline void Euler(void)
{
vis[1]=miu[1]=1; RI i,j; for (i=2;i<=P;++i)
{
if (!vis[i]) prime[++cnt]=i,miu[i]=-1;
for (j=1;j<=cnt&&i*Pi<=P;++j)
{
vis[i*Pi]=1; if (i%Pi) miu[i*Pi]=-miu[i]; else break;
}
}
for (j=1;j<=cnt;++j) for (i=1;i*Pi<=P;++i) sum[i*Pi]+=miu[i];
for (i=1;i<=P;++i) sum[i]+=sum[i-1];
}
#undef Pi
inline int min(int a,int b)
{
return a<b?a:b;
}
inline void swap(int &a,int &b)
{
int t=a; a=b; b=t;
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
for (Euler(),F.read(t);t;--t)
{
F.read(n); F.read(m); ans=0; if (n>m) swap(n,m);
for (RI l=1,r;l<=n;l=r+1)
{
r=min(n/(n/l),m/(m/l)); ans+=1LL*(n/l)*(m/l)*(sum[r]-sum[l-1]);
}
F.write(ans);
}
return F.Fend(),0;
}

Luogu P2257 YY的GCD的更多相关文章

  1. [Luogu P2257] YY的GCD (莫比乌斯函数)

    题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...

  2. 【题解】Luogu P2257 YY的GCD

    原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 显然题目的答案就是\[ Ans=\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)=prime]\] 我们先设设F(n)表示满足\ ...

  3. 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 ...

  4. 洛谷 P2257 YY的GCD

    洛谷 P2257 YY的GCD \(solution:\) 这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路. 我们可以列出答案就是要我们求: \(ans ...

  5. P2257 YY的GCD

    P2257 YY的GCD 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 k ...

  6. 题解 P2257 YY的GCD

    P2257 YY的GCD 解题思路 果然数论的题是真心不好搞. 第一个莫比乌斯反演的题,好好推一下式子吧..(借鉴了blog) 我们要求的答案就是\(Ans=\sum\limits_{i=1}^{n} ...

  7. P2257 YY的GCD (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...

  8. 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...

  9. 洛谷 P2257 YY的GCD 题解

    原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...

随机推荐

  1. 修复cocos2dx的Label,WP8下不能换行的问题

    注:2014年12月23日有内存/性能优化更新,内容在下面分割线后 搞了几个小时,这个头疼的问题,我给出代码吧. 找到 libcocos2d/platform/winrt/CCFreeTypeFont ...

  2. Spark Word2Vec算法代码实现

    1 import com.hankcs.hanlp.tokenizer.NLPTokenizer import org.apache.hadoop.io.{LongWritable, Text} im ...

  3. 在Java中调用C/C++本地库

    JNI是Java Native Interface的英文缩写, 中文翻译为本地调用, 自从Java 1.1开始就成为了Java标准的一部分. C/C++是系统级的编程语言, 可以用来开发任何和系统相关 ...

  4. 洗礼灵魂,修炼python(36)--面向对象编程(6)—类的相关内置函数issubclass,hasattr等

    啥?我靠,类也有内置函数?哈哈,确实有的.有哪些呢?请往下看 issubclass(cls, class_or_tuple, /) 1.基本属性: 方法全是特殊方法 2.使用方法:判断一个类是否由另一 ...

  5. U盘内容被病毒隐藏的解决办法(亲测可用)

    前几天用U盘的时候不小心感染上了病毒,用自己的电脑打开后里面只剩下一个U盘的快捷方式,选中显示隐藏文件之后依然没有任何显示,但是查看U盘的属性的时候可以看到,U盘已经使用了300多M,所以就上网查了一 ...

  6. Django电商项目---完成商品主页显示day2

    利用DjangoAdmin初始化数据库 创建项目 python manage.py startapp df_goods 添加配置 manas/urls.py manas/settings.py 新创建 ...

  7. git版本控制工具基本用法讲解(转)

    一.安装Git 在linux系统使用非常方便,只需要打开shell界面,并输入: ? 1 sudo apt-get install git-core 按下回车后输入密码,即可完成Git的安装.但我们可 ...

  8. 常见的web攻击方式

    跨站脚本攻击(XSS) 概述 跨站脚本攻击(XSS,Cross-site scripting),指攻击者在网页中嵌入恶意脚本程序,是最常见和基本的攻击WEB网站的方法.攻击者在网页上发布包含攻击性代码 ...

  9. .whl文件打开方式 Python

    wheel文件本质上就是zip或者rar,只不过他更加方便python的安装以及使用.在之前的图片中我们只要使用pip install wheel 就可以安装wheel. 在安装了wheel之后我们可 ...

  10. SALALchemy Session与scoped_session的源码分析

    我们发现Session与scoped_session都有一些方法: 但是scoped_session的源码里面没有设置这些方法让我们从源码里去窥探下源码在哪里设置了这些方法: Session里面的方法 ...