说到这个题目,有一道题,要求要算出x的y次方模p等于多少
x^y%p
假设,y=37,那么用乘法算就要有36次乘法运算,大概是这样:
x*x*x*x*x*x*x*x......*x(乘了36次)
写作C++程序的话是这样的
1 for(int i=1;i<=y;i++){ 2 (做操作) 3 }
这样的时间复杂度是O(y),因为它是for循环走了y遍
时间复杂度太高
而快速幂就完美解决了这一点,他的原理如下:
- x^37
- =(x^18)^2*2 2次乘法运算
- (x^18)=(x^9)^2 1次乘法运算
- (x^9)=(x^4)^2*2 2次乘法运算
- (x^4)=(x^2)^2 1次乘法运算
- (x^2)=x*x 1次乘法运算
这样我们可以看到时间复杂度大幅降低了
还有在快速幂时,一定要把int类型变量改为long long不然会报int!!!

此片为我的CSDN博客搬移,详情请看CSDN

本文来自博客园,作者:Larryhui,转载请注明原文链接:https://www.cnblogs.com/Larryhui/p/16532271.html
浙公网安备 33010602011771号