我们知道像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; }
我们在处理它时相同适用二进制和位运算来处理所以我说二进制和位运算是非常重要的嘛。
__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; }
好了。
感谢自己坚持。
原文地址:http://www.cnblogs.com/mengfanrong/p/3755756.html