YY的GCD【莫比乌斯反演】

[Luogu2257]YY的GCD

求\(\sum_{i=1}^n\sum_{j=1}^m[(x, y)\)为质数\(]\)

\(T \le {10}^4, 1\le n, m \le {10}^7\)

假设\(p\)为\(M\)以内的质数

\[\begin{aligned}ans&=\sum_{p\in prime}\sum_{i=1}^n\sum_{j=1}^m[(i, j) == p]\&=\sum_{p\in prime}\sum_{x=1}^{\lfloor\frac{n}{p}\rfloor}\mu(x)\lfloor\frac{n}{xp}\rfloor\lfloor\frac{m}{xp}\rfloor\end{aligned}\]

令\(T=xp\)则

\[\begin{aligned}ans&=\sum_{T=1}^n\sum_{p\in prime \;\&\&\; p|T}{\mu(\frac{T}{p})\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor}\&=\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{p\in prime \;\&\&\; p|T}\mu(\frac{T}{q}) \end{aligned}
\]

只要筛出\(G(T)=\sum_{p\in prime \;\&\&\; p|T}\mu(\frac{T}{q})\)就可以\(O(\sqrt{N})\)算出

\[ans=\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor G(T)\]

这题除了\(ans\)都不能开\(long\;long\),不然会\(TLE\)

void init(){
    miu[1]=1;
    for(int i=2; i < Maxn; i++){
        if(!p[i]) p[++ptot]=i, miu[i]=-1;
        for(int j=1, x; j <= ptot && (x=p[j]*i) < Maxn; j++){
            p[x]=1; if(i%p[j] == 0) break; miu[x]=-miu[i];
        }
    }
    for(int i=1; i <= ptot; i++) for(int j=p[i]; j < Maxn; j+=p[i]) G[j]+=miu[j/p[i]];
    for(int i=1; i < Maxn; i++) G[i]+=G[i-1];
}
void solve(){
    init(); int T=read();
    while(T--){
        n=read(), m=read(); ll ans=0; if(n > m) swap(n, m);
        for(int l=1, r=0; r < n; l=r+1){
            r=min(n/(n/l), m/(m/l));
            ans+=1ll*(G[r]-G[l-1])*(n/l)*(m/l);
        }
        printf("%lld\n", ans);
    }
}

原文地址:https://www.cnblogs.com/zerolt/p/9307569.html

时间: 2024-07-30 22:22:37

YY的GCD【莫比乌斯反演】的相关文章

BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discuss] Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必然不会了,于是向你来请教……多组输入 Input 第一行一个整数T 表述数据组数接下来T行,每行两个正

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} \righ

bzoj 2820 YY的GCD 莫比乌斯反演

题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性筛的时候只考虑当前的数最小因子,如果进来的最小因子不存在,相当于在之前那个数的基础上的每个mu值都多加了一个质数,那么 这些mu值就要取反,如果已经包含了这个最小因子,我这里另外进行了跟之前类似的讨论方法,在代码中写着 因为这题目数据比较大,这里求解的时候不应该线性求,因为总是有一段区间的n/i*(m/i)值

【BZOJ2820】YY的GCD [莫比乌斯反演]

YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对k. Input 第一行一个整数T 表述数据组数接下来T行,每行两个正整数,表示N, M. Output T行,每行一个整数表示第 i 组数据的结果 Sample Input 2 10 10 100 100 Sample Output

BZOJ2820 YY的GCD 莫比乌斯反演

题意:求x∈[1,N],y∈[1,M]中gcd(x,y)为质数的数对的数量. 题解: 这个题把BZOJ2301中的k改成枚举素数就能过啦……才怪,不过和那个题的思路类似,但我们不枚举每一个质数,而是直接枚举质数p的倍数T,得到\[{f_{A,B,p}} = \sum\limits_{p|T} {[{F_{A,B,T}}\sum\limits_{p|T} {\mu (\frac{T}{p})} ]} \]其中F,f的定义与2301中的相同,而分块的时候求和需要预处理出来后面那个和式,稍微修改一下线

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

题意:求\[\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j) = prim]\] 题解:那就开始化式子吧!! \[f(d) = \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j) = d]\] \[F(x) = \sum_{d|x} f(d) = \left \lfloor \frac{n}{x} \right \rfloor \left \lfloor \frac{m}{x} \right \rfloor\] \[f(d) = \sum_{d|

BZOJ 2820 YY的GCD ——莫比乌斯反演

我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做?TLE 考虑优化,由于看到了pd是成对出现的,令T=pd $ans=\sum_{T<=min(n,m)}\lfloor n / T \rfloor *\lfloor m / T \rfloor \sum_{p \mid T}\mu(T/p)$ 或者 $ans=\sum_{T<=min(n,m)}

hdu-1695 GCD(莫比乌斯反演)

题目链接: GCD Time Limit: 6000/3000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y) = k. GCD(x, y) means the greatest common divisor

BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)

2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2534  Solved: 1129 [Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sample Output 4 HINT hint 对于样例(2,2),(2,4),(3,3),(4,2)

【BZOJ2818】Gcd [莫比乌斯反演]

Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sample Output 4 HINT 1<=N<=10^7 Source 直接莫比乌斯反演即可. 然后对于这个式子,我们下界分块一下即可. Code 1 #i