zoukankan      html  css  js  c++  java
  • a^b%c 小技巧

    我们知道像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有些类似,事实上遇到这样的位运算的都是这样来处理,我们学会了以后就能自己灵活的运用了。

    好了。

    感谢自己坚持。

  • 相关阅读:
    数组review
    算法复杂度分析
    利用栈判断括号是否匹配(Parentheses)
    java实现stack和queue
    路由器结构
    层次化路由简介
    es 嵌套对象和父子文档对比
    远心镜头的远心度
    Delphi编程细节汇总
    halcon深度学习总结(二)
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3755756.html
Copyright © 2011-2022 走看看