CF 906D - Power Tower (幂塔函数 -扩展欧拉定理)

一个链接:https://www.cnblogs.com/violet-acmer/articles/11451240.html

 

D. Power Tower

题意:                                     求L至R取余m的值。

思路:扩展欧拉定理CF 906D - Power Tower (幂塔函数 -扩展欧拉定理)_第1张图片

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ull unsigned long long
#define Mod(x) (x+mod)%mod
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define mems(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const ll mod=1e9+7;;
const int N=1e5+10;
ll h[N];
mapmp;
ll tao(ll n)
{
    ll ans=n;
    ll tt=n;
    if(mp[n])
        return mp[n];
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            ans-=ans/i;
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1)
        ans-=ans/n;
    return mp[tt]=ans;
}
ll MOD(ll a,ll mod)
{
    if(a>=1;
        a=MOD(a*a,c);
    }
    return ans;
}
ll solve(ll a,ll b,ll mod)
{
    if(b==a)
        return MOD(h[a],mod);
    if(mod==1)
        return MOD(h[a],mod);
    return power(h[a],solve(a+1,b,tao(mod)),mod);///这里a+1,看上面思路
}
int main()
{
    ll n,m;
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&h[i]);
    }
    int q;
    scanf("%d",&q);
    for(int i=0;i

 

你可能感兴趣的:(【欧拉降幂和扩展欧拉降幂】)