数论--阶乘幂&扩展欧拉定理--codeforces 906d Power Tower

给定数组w,q次查询,求w[ql]^ ( w[ql + 1] ^ ( ... w[qr - 1] ^ (w[qr]) ) ) % m

扩展欧拉定理 (a,m) != 1时,

if(b >= phi(m)) a^b % m = a ^ (b % phi(m) + phi(m) ) % m

if(b < phi(m)) a^b % m = a ^ b % m(快速幂)

1.快速幂和递归时要时刻注意指数和phi(m)的大小关系

ll qk_pow(ll a,ll b,ll p)

{

    ll ans = 1;

     a = a >= p ? a % p + p : a;

    while (b) {

        if(b & 1) ans = ans * a >= p ? ans * a % p + p : ans * a % p;

        b >>= 1;

        a = a * a >= p ? a * a % p + p : a * a % p;

    }

    return ans;

}

2.

ll f(int ql,int qr,int pos)

{

    int m = v[pos];

    if(m == 1) return 1;

    if(ql == qr) return w[ql] < m ? w[

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值