zoukankan      html  css  js  c++  java
  • 【BZOJ2820】YY的GCD(莫比乌斯反演)

    传送门

    题意:求i=1nj=1m[gcd(i,j)=prime]sum_{i=1}^{n}sum_{j=1}^{m}[gcd(i,j)=prime]

    考虑对于每一个质数pp

    ansp=d=1min(np,mp)μ(d)npdmpd=d=1μ(d)npdmpdans_p=sum_{d=1}^{min(frac n p,frac m p)}mu (d) lfloor frac{frac{n}{p} }{d} floor lfloor frac{frac{m}{p}}{d} floor=sum_{d=1}mu (d) lfloor frac{n}{pd} floor lfloor frac{m}{pd} floor

    所以

    ans=pprimed=1μ(d)npdmpdans=sum_{pin prime}sum_{d=1}mu (d) lfloor frac{n}{pd} floor lfloor frac{m}{pd} floor

    T=pdT=pd,考虑枚举TT

    ans=T=1min(n,m)nTmTpTμ(Tp)ans=sum_{T=1}^{min(n,m)}lfloor frac n T floor lfloor frac m T floorsum_{p|T}mu(frac T p)

    思考公式的转化,为什么??

    pTμ(Tp)sum_{p|T}mu(frac T p)可以通过枚举每个质数暴力更新倍数O(n)O(n)求(质数约有nlnnfrac n {ln_n}个)

    每次询问整除分块O(n)O(sqrt n)解决

    复杂度O(nn+nlognlogn)O(nsqrt n+nlognlogn)

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    inline int read(){
    	char ch=getchar();
    	int res=0,f=1;
    	while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
    	while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=getchar();
    	return res*f;
    }
    const int N=10000005;
    int vis[N],tot,pr[N],mu[N],n,m;
    ll sum[N],f[N];
    inline void init(){
    	mu[1]=1;
    	for(int i=2;i<N;i++){
    		if(!vis[i])pr[++tot]=i,mu[i]=-1;
    		for(int j=1;j<=tot&&i*pr[j]<N;j++){
    			vis[i*pr[j]]=1;
    			if(i%pr[j]==0)break;
    			mu[i*pr[j]]=-mu[i];
    		}
    	}
    	for(int i=1;i<=tot;i++){
    		for(int j=1;j*pr[i]<N;j++){
    			f[j*pr[i]]+=mu[j];
    		}
    	}
    	for(int i=1;i<N;i++)sum[i]=sum[i-1]+f[i];
    }
    int main(){
    	int T=read();init();
    	while(T--){
    		int n=read(),m=read();
    		int p=min(n,m);ll ans=0;
    		for(int i=1,nxt;i<=p;i=nxt+1){
    			nxt=min((n/(n/i)),(m/(m/i)));
    			ans+=1ll*(sum[nxt]-sum[i-1])*(m/i)*(n/i);
    		}
    		cout<<ans<<'
    ';
    	}
    }
  • 相关阅读:
    使用 Hibernate 完成 HibernateUtils 类 (适用于单独使用Hibernate或Struts+Hibernate)
    python 面向对象(成员,静态,类)的(变量,方法)区别
    python 2.7 字符串处理
    python 2 range, list, and set
    python debug小技巧&&工程能力的几点建议
    python 数据类型转换
    python 2 控制台传参,解包,编码问题初探
    带搜索图标的文本框
    Jquery 实现标签切换效果
    javascript 获取当前日期 月份 时间
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/11145667.html
Copyright © 2011-2022 走看看