CH0101 a^b 快速幂

题目链接http://contest-hunter.org:83/contest/0x00%E3%80%8C%E5%9F%BA%E6%9C%AC%E7%AE%97%E6%B3%95%E3%80%8D%E4%BE%8B%E9%A2%98/0101%20a%5Eb

数据有点问题,题目明确说了a,b,p大于0 ,可样例中还有0

 

ac代码:

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

ll a, b, p;
ll pow(ll a, ll b, ll p){
    ll ans = 1%p;     //样例:123456789 0 1 输出:0 ,若不加%p,则输出1
    while (b){

        if (b & 1) ans = ans*a%p;   //b&1运算可以取出b在二进制表示下的最低位
        a = a*a%p;
        b >>= 1;  //舍去最低位
    }
    return ans;
}

int main()
{
    cin >> a >> b >> p;
    cout << pow(a, b, p) << endl;
    return 0;
}
View Code

 

posted @ 2019-03-13 20:20  looeyWei  阅读(234)  评论(0编辑  收藏  举报