a^b

【problem description】

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

【input format】

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

【output format】

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

【sample input】

2 3 9

【sample output】

8

【analysis】

这题本来是个很简单的分治题目。

具体如何分治看代码-_-

不过lyd给的数据还是很强的,如果p=1,那么所有的答案都是0,所以无论如何返回值是都要%p

【accepted code】

#include<bits/stdc++.h>
using namespace std;

long long  a,b,p;

void readp(){
	cin>>a>>b>>p;
}

long long cot(int x){
	if(x==1)return a%p;
	if(x==0)return 1%p;
	long long mid=x/2;
	long long t=cot(mid);
	long long ans=0;
	ans=(t*t)%p;
	if(x%2!=0)ans=(ans*a)%p;
	return ans;
}

void work(){
	long long ans=cot(b);
	cout<<ans<<endl;
}

int main(){
	readp();
	work();
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值