【题目链接】:https://nanti.jisuanke.com/t/25087
【题目描述】:
一个数的整数次幂,是我们在计算中经常用到的,但是怎么可以在 O(log (n)) 的时间内算出结果呢?
代码框中的代码是一种实现,请分析并填写缺失的代码,求 x^y mod p 的结果。
import java.util.*;
public class Main {
public static int pw(int x, int y, int p) {
if (y == 0) {
return 1;
}
int res = /*在这里填写必要的代码*/;
if ((y & 1) != 0) {
res = res * x % p;
}
return res;
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int x = cin.nextInt();
int y = cin.nextInt();
int p = cin.nextInt();
System.out.println(pw(x, y, p));
}
}
【答案】:pw(x, y / 2, p) * pw(x, y / 2, p) % p
【解析】:
【代码】:
import java.util.*;
public class Main {
public static int pw(int x, int y, int p) {
if (y == 0) {
return 1;
}
int res = pw(x, y / 2, p) * pw(x, y / 2, p) % p/*在这里填写必要的代码*/;
if ((y & 1) != 0) {
res = res * x % p;
}
return res;
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int x = cin.nextInt();
int y = cin.nextInt();
int p = cin.nextInt();
System.out.println(pw(x, y, p));
}
}