zoukankan      html  css  js  c++  java
  • BZOJ2671 : Calc

    设$d=gcd(a,b),a=xd,b=yd$,则$a+b|ab$等价于$x+y|xyd$。

    因为$x,y$互质,所以$x+y|d$。

    假设$x<y$,那么对于固定的$x,y$,有$lfloorfrac{n}{y(x+y)} floor$个$d$。

    枚举$y$,设$m=lfloorfrac{n}{y} floor$,则它的贡献为:

    [egin{eqnarray*}
    &&sum_{i=1}^{y-1}[gcd(i,y)=1]lfloorfrac{m}{i+y} floor\
    &=&sum_{i=1}^{y-1}sum_{d|gcd(i,y)}mu(d)lfloorfrac{m}{i+y} floor\
    &=&sum_{i=1}^{y-1}sum_{d|i,d|y}mu(d)lfloorfrac{m}{i+y} floor\
    &=&sum_{d|y}mu(d)sum_{d|i}lfloorfrac{m}{i+y} floor
    end{eqnarray*}]

    枚举$y$的约数$d$,再分段计算$sum_{d|i}lfloorfrac{m}{i+y} floor$即可。

    时间复杂度$O(N^frac{3}{4}log N)$。

    #include<cstdio>
    typedef long long ll;
    const int N=46500,M=505030;
    int n,m,lim,i,j,d,l,r,vis[N],tot,p[N],mu[N],g[N],v[M],nxt[M],ed;ll ans,t;
    inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
    int main(){
      for(scanf("%d",&n);(ll)lim*(lim+1)<=n;lim++);
      for(mu[1]=1,i=2;i<lim;i++){
        if(!vis[i])p[tot++]=i,mu[i]=-1;
        for(j=0;j<tot;j++){
          if(i*p[j]>=lim)break;
          vis[i*p[j]]=1;
          if(i%p[j])mu[i*p[j]]=-mu[i];else break;
        }
      }
      for(i=1;i<lim;i++)if(mu[i])for(j=i;j<lim;j+=i)add(j,i);
      for(i=2;i<lim;i++)for(m=n/i,j=g[i];j;j=nxt[j]){
        for(t=0,d=v[j],l=1;l<i&&i+l<=m;l=r+1){
          r=m/(m/(i+l))-i;
          if(r>=i)r=i-1;
          t+=(ll)(r/d-(l-1)/d)*(m/(i+l));
        }
        ans+=t*mu[d];
      }
      return printf("%lld",ans),0;
    }
    

      

  • 相关阅读:
    实现一个WEBIM
    拼写纠错
    UML系列图用例图
    [bzoj1670][Usaco2006 Oct]Building the Moat
    [bzoj3626][LNOI2014]LCA
    转:用JS写的一个树型结构
    一个购物车中修改商品数量的实列
    网站访问统计在Global.asax中的配置的深入讨论
    转:JavaScript中的三级联动
    转:用Sql Server存储上载图片字体
  • 原文地址:https://www.cnblogs.com/clrs97/p/4772756.html
Copyright © 2011-2022 走看看