super_log

图片说明
图片说明

  • 题意:
  • 给出a,b,mod,让你输出(a^a^a.......^a)%mod,其中a一共有b个
  • 题意:
  • 递归扩展欧拉降幂公式
  • 代码:
    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long 
    const ll maxx = 1e6+100;
    ll phi[maxx];
    ll mods(ll x,ll mod){
      if(x < mod)
          return x;
      return x%mod+mod;
    }
    void init(){
      for(ll i=2;i<maxx;i++){
          if(!phi[i])
              for(ll j=i;j<maxx;j+=i){
                  if(!phi[j])
                      phi[j] = j;
                  phi[j] = phi[j]/i*(i-1);
              }
      }
    }
    ll pow_mod(ll a,ll b,ll mod){
      ll cnt=1;
      while(b){
          if(b&1)
              cnt=mods(cnt*a,mod);
          a=mods(a*a,mod);
          b>>=1;
      }
      return cnt;//这里就不要取模了
    }
    ll solve(ll a,ll b,ll mod)
    {
      if(mod == 1)
          return 1;
      if(b == 0)
          return 1;
      ll p = phi[mod];
      ll x = solve(a,b-1,p);
      return pow_mod(a,x,mod);
    }
    int main()
    {
      int t;
      phi[0]=0,phi[1]=1;
      init();
      scanf("%d",&t);
      while(t--)
      {
          ll a,b,mod;
          scanf("%lld%lld%lld",&a,&b,&mod);
          printf("%lld\n",solve(a,b,mod)%mod);
      }
      return 0;
    }
全部评论

相关推荐

05-25 10:45
门头沟学院 Java
Frank_zhang:没实习一个项目肯定不够,可以再做一个轮子,技术栈再补一个mq,微服务,整体再换个简历模板,暑期尽量再找一个日常实习
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务