说到这个题目,有一道题,要求要算出x的y次方模p等于多少
x^y%p
假设,y=37,那么用乘法算就要有36次乘法运算,大概是这样:
x*x*x*x*x*x*x*x......*x(乘了36次)
写作C++程序的话是这样的
for(int i=1;i<=y;i++){
(做操作)
}
这样的时间复杂度是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!!!