一个数的整数次幂,是我们在计算中经常用到的,但是怎么可以在 O(log(n))\mathcal{O}(\log (n))O(log(n)) 的时间内算出结果呢?
代码框中的代码是一种实现,请分析并填写缺失的代码,求
xymodpx^y \mod pxymodp 的结果。
思路:这是一个递归的过程,需要填写的是关于函数递归的。
答案: pw((x*x)%p,y/2,p)
#include <stdio.h>
int pw(int x, int y, int p) {
if (!y) {
return 1;
}
int res = pw((x*x)%p,y/2,p);
if (y & 1) {
res = res * x % p;
}
return res;
}
int main() {
int x, y, p;
scanf("%d%d%d", &x, &y, &p);
printf("%d\n", pw(x, y, p));
return 0;
}