【快速幂】人见人爱A^B

题目描述

在这里插入图片描述

知识点

二分幂/快速幂

实现

码前思考

  1. 考虑要不要用LL
    不需要!10000*10000int的范围之内;

代码实现

//二分幂题 
#include "bits/stdc++.h"
using namespace std;

int a;
int b;

int binaryPow(int a,int b,int m){
	if(b == 0){
		return 1;
	}else{
		if(b%2 == 1){
			return a * binaryPow(a,b-1,m) % m;
		}else{
			int mul = binaryPow(a,b/2,m);
			return mul * mul % m;
		} 
	}
}

int main(){
	while(~(scanf("%d",&a))){
		scanf("%d",&b);
		if(a == 0 && b == 0){
			break;
		}
		int ans = binaryPow(a,b,1000);
		printf("%d\n",ans);
	}
	return 0;
} 

码后反思

  1. 貌似二分求幂好像用的最多的就是求余数了。。。
  2. 对于判别奇偶数可以使用&运算符!
  3. 上面的是递归的写法,其实还有迭代的写法,也就是递推;
  4. 注意每次函数返回时都要%m这样才能减小规模!

二刷代码

建议还是使用long long来存储快速幂的结果。

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;	//快速幂模板建议使用long long 

ll binaryPow(ll a,ll b,ll m){
	if(b==0){
		return 1;
	}else{
		if(b&1==1){	//奇数 
			return (a*binaryPow(a,b-1,m))%m; 
		}else{	//偶数 
			ll mul = binaryPow(a,b/2,m);
			return (mul*mul)%m;
		} 
	}
}

int main(){
	ll a,b;
	while(scanf("%lld %lld",&a,&b)!=EOF){
		if(a==0 && b==0){
			return 0;
		}
		//求快速幂
		printf("%lld\n",binaryPow(a,b,1000)); 
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值