December 21, 2022
快速幂
在acm被称为快速幂(平方求幂) 在ctf中也被称为 $montecarlo$ 先说幂运算的朴素做法,在数学中,重复连乘的运算叫做乘方,乘方的结果称为 幂 ${\displaystyle n}$ 个相同的数 ${\displaystyle b}$ 连续相乘 [公式] // c++ version #include <iostream> int b, n, sum; // 仅作演示, 实际应该使用python或高精度防止爆int int main() { std::cin >> b >> n; if (n == 0) { //对0次幂特判 std::cout << 1; return 0; } sum = b, n = n - 1; while (n --) { sum *= b; } for (int sum) std::cout << sum; return 0; } 让我们先来思考一个问题:7的10次方,怎样算比较快? 方法1:上述提到的朴素算法, 来计算 $7 *7=49$,$49* 7=343$ / 这样算无疑太慢了,尤其对计算机的CPU而言,每次运算只乘上一个个位数,无疑太屈才了。这时我们想到,也许可以拆分问题。 / 方法2:先算7的5次方,即$7 *7* 7 *7* 7$,再算它的平方,共进行了5次乘法。 / 方法3:先算7 *7得49,则7的5次方为$49* 49 \* 7$,再算它的平方,共进行了4次乘法。
Read more