问题标题: 酷町堂:7617 a^b

0
0
已解决
熊潇然
熊潇然
初级启示者
初级启示者

题目链接: 酷町堂:7617

7617   a^b

经验值:1200 时间限制:1000毫秒 内存限制:128MB

题目描述 Deion

求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9

输入描述 Input Deion

三个用空格隔开的整数a,b和p。

输出描述 Output Deion

一个整数,表示a^b mod p的值。

样例输入 Sample Input

2 3 9

样例输出 Sample Output

8

 

错误代码 WA 80分:

#include<bits/stdc++.h>
using namespace std;
long long b,p,k;
long long f(long long a,long long b){
    if(b==0) return 1;
    long long t=1;
    while(b){
        if(b&1) t*=a;
        b>>=1;
        a*=a;
        a%=k;
        t%=k;
        if(t==0) t=1;
        if(a==0) a=1;
    }
    return t;
}
int main(){
    cin>>b>>p>>k;
    cout<<f(b,p)%k;
    return 0;
}

求大佬指点!


0
已采纳
崔子周
崔子周
高级天翼
高级天翼

兄弟函数指点:

ll f(ll a,ll b,ll p) {

ll ans=1%p;

while(b) {

if(b&1) ans=ans*a%p;

a=a*a%p;

b>>=1;

}

return ans;

}

主函数直接输入a,b,p,最后输出f(a,b,p)

100AC

我要回答