zoukankan      html  css  js  c++  java
  • Codeforce-Power Tower(欧拉降幂)

    Power Tower

    题意:

    • 一个序列有(n)个数,(q)次询问,将(l)(r)这个区间的数叠起来模上(M)

    思路:

    • 欧拉降幂
    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    map<ll,ll>mp;
    const int M=1e5+10;
    ll a[M];
    ll ol(ll x)
    {
        if(mp[x])
        {
            return mp[x];
        }
        ll ans=x;
        ll n=x;
        for(int i=2;i*i<=n;i++)
        {
            if(x%i==0)
            {
                ans=ans*(i-1)/i;
            }
            while(x%i==0)
            {
                x/=i;
            }
        }
        if(x>1)
        {
            ans=ans*(x-1)/x;
        }
        mp[n]=ans;
        return ans;
    }
    ll query(ll a,ll mod)
    {
        if(a<mod)
        {
            return a;
        }
        else
        {
            return a%mod+mod;
        }
        
    }
    ll pow(ll a,ll n,ll mod)
    {
        ll ans=1;
        ll base=a;
        while(n)
        {
            if(n&1)
            {
                ans=query(ans*base,mod);
            }
            base=query(base*base,mod);
            n>>=1;
        }
        return ans;
    }
    ll solve(int l,int r,ll mod)
    {
        if(r==l||mod==1)
        {
            return query(a[l],mod);
        }
        ll d=solve(l+1,r,ol(mod));
        return pow(a[l],d,mod);
    }
    int main( )
    {
        int n,q,l,r;
        ll mod;
        //cout<<ol(28)<<endl;
        scanf("%d%lld",&n,&mod);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
        }
        scanf("%d",&q);
        while(q--)
        {
            scanf("%d%d",&l,&r);
            printf("%lld
    ",solve(l,r,mod)%mod);
        }
        return 0;
    }
    
  • 相关阅读:
    MVVM知识库总结
    C#常用类汇总
    silverlight调用MVC WebApi方法
    IE调试方法(一)<转>
    PHP中关于超链接的拼接问题
    intval()和(int)转换使用与区别
    ThinkPHP模板(一)
    修改ThinkSNS网站入口
    js中的this和apply
    Thinkphp的Volist标签
  • 原文地址:https://www.cnblogs.com/lcbwwy/p/13125159.html
Copyright © 2011-2022 走看看