zoukankan      html  css  js  c++  java
  • BZOJ3813 : 奇数国

    询问[l,r]实际就是询问$varphi(该区间内所有数的乘积)$

    $varphi(n)=n imes... imes(1-frac{1}{p_i})$

    由于素数只有60个,所以只需用线段树维护区间内所有数字的积,以及压位表示的出现过的素数即可

    $O(log n)$每次操作

    #include<cstdio>
    typedef long long ll;
    const int n=100000,P=19961993;
    int m,i,j,x,y,p[60],t;ll val,ap,rev[60];bool v[282];
    struct P{ll val,ap;}T[400010];
    inline void up(int x){
      T[x].val=T[x<<1].val*T[x<<1|1].val%P;
      T[x].ap=T[x<<1].ap|T[x<<1|1].ap;
    }
    void build(int x,int a,int b){
      if(a==b){T[x].val=3,T[x].ap=2;return;}
      int mid=(a+b)>>1;
      build(x<<1,a,mid),build(x<<1|1,mid+1,b),up(x);
    }
    void change(int x,int a,int b,int c,int d){
      if(a==b){
        T[x].val=d,T[x].ap=0;
        for(int i=0;i<60;i++)if(d%p[i]==0)T[x].ap|=1LL<<i;
        return;
      }
      int mid=(a+b)>>1;
      if(c<=mid)change(x<<1,a,mid,c,d);else change(x<<1|1,mid+1,b,c,d);
      up(x);
    }
    void ask(int x,int a,int b,int c,int d){
      if(c<=a&&b<=d){val=val*T[x].val%P;ap|=T[x].ap;return;}
      int mid=(a+b)>>1;
      if(c<=mid)ask(x<<1,a,mid,c,d);
      if(d>mid)ask(x<<1|1,mid+1,b,c,d);
    }
    inline ll pow(ll a,int b){ll t=1;for(;b;b>>=1,a=a*a%P)if(b&1)t=t*a%P;return t;}
    inline void read(int&a){char ch;while(!(((ch=getchar())>='0')&&(ch<='9')));a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}
    int main(){
      for(i=2;t<60;i++)if(!v[i])for(p[t++]=j=i;j<=281;j+=i)v[j]=1;
      for(i=0;i<60;i++)rev[i]=pow(p[i],P-2)*(p[i]-1)%P;
      build(1,1,n);
      read(m);
      while(m--){
        read(j),read(x),read(y);
        if(j)change(1,1,n,x,y);else{
          val=1,ap=0;
          ask(1,1,n,x,y);
          for(j=0;j<60;j++,ap>>=1)if(ap&1)val=val*rev[j]%P;
          printf("%lld
    ",val);
        }
      }
      return 0;
    }
    

      

  • 相关阅读:
    Linux OTG当串口、网口、U盘
    Linux 双网卡双网段通信
    Buildroot Savedefconfig
    OTG作为大容量设备
    EntityFramework Core问题处理集锦(一)
    EntityFramework Core数据查询
    ASP.NET Core MVC请求超时设置解决方案
    EntityFramework Core迁移时出现数据库已存在对象问题解决方案
    EntityFramework Core映射关系详解
    探讨SQL Server并发处理存在就更新七种解决方案
  • 原文地址:https://www.cnblogs.com/clrs97/p/4403180.html
Copyright © 2011-2022 走看看