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

a^b%c 小技巧

时间:2014-05-09 21:59:49      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:算法   acm   数学   二进制   位运算   

我们知道像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 小技巧

标签:算法   acm   数学   二进制   位运算   

原文地址:http://blog.csdn.net/u010123208/article/details/25393067

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