快速幂的底数,指数,模声明为longlong可以得到正确答案,而声明为int则不能。经调试发现int型没有溢出。
请问各位dalao这是为什么?
(附上代码,fastPower是正确输出的函数;main里是用的int型,错误)
//ÆÓËØËã·¨
#include <bits/stdc++.h>
using namespace std;
int b,p,k;
int s=1;
long long fastPower(long long base, long long power) {
long long result = 1;
while (power > 0) {
if (power % 2 == 1) {
result = result * base % k;
}
power = power / 2;
base = (base * base) % k;
}
return result;
}
int main(){
cin>>b>>p>>k;
cout<<b<<"^"<<p<<" mod "<<k<<"=";
cout<<fastPower(b,p)<<endl<<endl;
while(p>0){
if(p%2==1){
s=s*b%k;
}
p/=2;
b=(b*b)%k;
}
cout<<s;
return 0;
}