YY的GCD【莫比乌斯反演】

本文详细解析了Luogu2257 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值