快速幂+费马小定理练习题:A的B的C次方次方

算A的B的C次方次方

问题描述
  //据说很多人的题目会有一大堆废话,本傻×就不在这里废话了。
  就是叫你算A的B的C次方次方。
  当然了,为了方便起见,把答案%1,000,000,007输出就好。
输入格式
  一行,三个整数A,B,C,以空格隔开。
输出格式
  输出A的B的C次方次方%1,000,000,007。

题解
根据费马小定理:
若存在整数 a , p 且gcd(a,p)=1,即二者互为质数,则有a^(p-1)≡ 1(mod p)

要求a的x次方时,x可以分为x=k*(p-1)+r,因此a的x次方=a的r次方,此时,r=x%(p-1)。对于本题,我们需要求解a的(b^c)%(p-1)次方

#include <iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;

int mod=1000000007;
ll  a,b,c;

ll poww(ll x,ll y,ll m){
    ll res=1;

    while(y){
        if(y&1){
            res=(res*x)%m;
        }
        y>>=1;
        x=(x*x)%m;
    }
    return res%m;
}


int main(){

    cin>>a>>b>>c;

    cout<<poww(a,poww(b,c,mod-1),mod)<<endl;
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值