• Codeforces 906 D. Power Tower


    http://codeforces.com/contest/906/problem/D

    欧拉降幂

    #include<cstdio>
    #include<iostream>
    
    using namespace std;
    
    int pi[35],phi[35],lim;
    
    int a[100001];
    
    void read(int &x)
    {
        x=0; char c=getchar();
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
    }
    
    int get_phi(int n)
    {
        int ph=n;
        for(int i=2;i*i<=n;++i)
            if(!(n%i))
            {
                ph=ph/i*(i-1);
                while(!(n%i)) n/=i;
            }
        if(n>1) ph=ph/n*(n-1);
        return ph;
    }
    
    int Pow(int a,int b,int mod,bool &flag)
    {
        int res=1;
        while(b)
        {
            if(b&1) 
            {
                flag|=(1LL*res*a>=mod);
                res=1LL*res*a%mod;    
            }
            flag|=(1LL*a*a>=mod);
            a=1LL*a*a%mod;
            b>>=1;
        }
        return res;
    }
    
    int f(int x,int dep)
    {
        if(dep>lim)
        {
            x-=dep-lim;
            dep=lim;
        }
        if(dep==1) return a[x]%pi[1];
        int tmp=a[x]; 
        if(tmp>=phi[dep-1]) tmp=tmp%phi[dep-1]+phi[dep-1]; 
        x--; 
        bool flag;
        for(int i=dep-1;i;--i)
        {
            flag=false;
            tmp=Pow(a[x],tmp,pi[i],flag);
            if(flag) tmp+=phi[i-1];
            x--;
        }
        return tmp;
    }
    
    int main()
    {
    //    freopen("data.in","r",stdin);
    //    freopen("my.out","w",stdout);
        int n,mod;
        read(n); read(mod);
        for(int i=1;i<=n;++i) read(a[i]);
        int tmp=mod;
        while(pi[lim]!=1)
        {
            pi[++lim]=tmp;
            phi[lim]=get_phi(tmp);
            tmp=phi[lim];
        }
        int q;
        read(q);
        int l,r;
        while(q--)
        {
            read(l); read(r);
            printf("%d
    ",f(r,r-l+1));
        }
        return 0;
    }
  • 相关阅读:
    农历查询
    C#颜色转换函数
    在IIS部署Silverlight网站
    silverlight双击事件处理
    关于List.Sort想到的
    sql获取总列数
    NHibernate的no persister for
    如何快速构建React组件库
    如何用canvas拍出 jDer's工作照
    Picker 组件的设计与实现
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/8544245.html
Copyright © 2020-2023  润新知