【SSL】1422取余运算(快速幂)
Time Limit:1000MS Memory Limit:65536K
Description
输入b,p,k的值,求b^p mod k 的值,其中b,p,k*k都是长整形。
Input
Output
Sample Input
2 10 9
Sample Output
2^10 mod 9=7
Hint
思路
快速幂。
ab
若b为奇数,ab=a
∗
*
∗(a
∗
*
∗a)(b-1)/2
若b为偶数,ab=(a
∗
*
∗a)b/2
代码
#include<iostream>
#include<cstdio>
using namespace std;
long long fastpower(long long b,long long p,long long k)
{
long long ans=1;
for(b%=k;p;p>>=1)
{
if(p&1)ans=(ans*b)%k;
b=(b*b)%k;
}
return ans;
}
int main()
{
long long b,p,k;
cin>>b>>p>>k;
cout<<b<<'^'<<p<<" mod "<<k<<'='<<fastpower(b,p,k);
return 0;
}