码迷,mamicode.com
首页 > 其他好文 > 详细

a^b%c 小技巧

时间:2014-06-29 14:06:27      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:style   blog   2014   art      name   

我们知道像a^b这种数在计算的时候由于大的增长速度非常快,所以常常越界,所以非常多题目在出的时候都会让我们取模。

a^b = a*a*a*a……(一共b个a相乘);我们前一篇文章在说两个数相乘的时 ,假设两个数足够大的话,这两个数相乘就会越界,使计算结果出错。所以我们在来写a^b时应该先写出两个数相乘的计算方法。

这个就不多说了,上一篇文章中有在这仅仅是贴出代码。

__int64 mult_mod(__int64 a,__int64 b,__int64 c)
{
	a=a%c;
	b=b%c;
	__int64 ans=0;
	while(b)
	{
		if(b&1) {   ans+=a; ans=ans%c;}
		a<<=1;a%=c;
		b>>1;
	}
	return ans;
}

如今我们再来说一下 a^b%c

我们在处理它时相同适用二进制和位运算来处理所以我说二进制和位运算是非常重要的嘛。

__int64 pow_mod(__int64 a,__int64 b,__int64 c)
{
	a=a%c;
	__int64 ans=1;
	while(b)
	{
		if(b&1) 
		{   
			ans =mult_mod(ans,a,c);
			ans%=c;
		}
		a=mult_mod(a,a,c);
		b>>1;
	}
	return ans;
}

这和a*b%c有些类似,事实上遇到这样的位运算的都是这样来处理,我们学会了以后就能自己灵活的运用了。

好了。

感谢自己坚持。

a^b%c 小技巧,布布扣,bubuko.com

a^b%c 小技巧

标签:style   blog   2014   art      name   

原文地址:http://www.cnblogs.com/mengfanrong/p/3755756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!