本文主要是介绍快速幂和慢速乘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天看看数论方面的事情。
快速幂 a^b mod c
递推式
分两种情况,一个是b为奇数,另一个是b为非0偶数,弹出条件为b==0。
int power(int a,int b,int p)
{if(b==0) return 1%p;//最好写上%p,更加严谨。int c=power(a,b/2,p);c=c*c%p;if(b&1) c=c*a%p;return c;
}
循环式
一般我个人比较推荐循环式
时间复杂度:O(logN)
int power(int a,int b,int p)
{int ret=1%p;while(b){if(b&1)ret=ret*a%p;b>>=1;a=a*a%p;}return ret;
}
数据范围(10^18)
慢速乘
和快速幂相似,只不过是把乘法转换成了加法。
int mul(int a,int b,int p)
{int ret=0;while(b){if(b&1)ret=(ret+a)%p;b>>=1;a=(a+a)%p;}return ret;
}
这篇关于快速幂和慢速乘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!