- 分享
快速幂
- @ 2025-10-2 14:29:23
迭代版本
int fast_pow(int a ,int b){
//迭代版本
long long ans = 1;
while(b){
//鸡数
if(b%2){
ans = ans%1000 * (a%1000);//拿出一个底数
}
a = (a * a)%1000;//底数的平方
b = b / 2;
}
return ans%1000;
}
递归版本
//递归版本
int fast_pow2(long long a ,long long b){
if(b==0) return 1;
long long half = fast_pow2(a,b/2);
if(b%2){
return half%1000 * (half%1000) * (a%1000);
}else{
return half%1000 * (half%1000);
}
}
乘法
#include <iostream>
using namespace std;
const long long LIMIT = 1000000000;
int main() {
long long a, b;
cin >> a >> b;
if (a == 1) {
cout << 1 << endl;
return 0;
}
long long res = 1;
long long base = a;
while (b) {
if (b & 1) {
if (res > LIMIT / base) {
cout << -1 << endl;
return 0;
}
res = res * base;
}
b >>= 1;
if (b) {
base = base * base;
}
}
cout << res << endl;
return 0;
}
0 条评论
目前还没有评论...