UVA, 374 Big Mod

来源:互联网 发布:windows snmpwalk 编辑:程序博客网 时间:2024/06/05 03:54

题意:R:=(B^p) mod M,现在给你B,p和m,求R。

思路:牵扯到指数,如果硬算肯定会越界,如果每次求指数之前先求余,那也会超时,P的极值是2^31,所以可以用二分来做,省时省力。

#include <iostream>using namespace std;int B,P,M;long long slove(int B,int P,int M){    if(P==0)        return 1%M;    if(P==1)        return B;    if(P%2==0)    {        long long s=slove(B,P/2,M);        return (s*s)%M;    }    long long s=slove(B,P/2,M);    return (s*s*B)%M;}int main(){    cin.sync_with_stdio(false);    while(cin>>B>>P>>M)    {        long long res=slove(B%M,P,M);        cout<<res<<"\n";    }    return 0;}


0 0