快速幂算法 目的:求 a 的 k 次方 mod p 的结果。
1<=a,k,p<=10^9
- 用朴素做法需要o(n)时间复杂度,用快速幂算法降低到o(logn)的时间复杂度
- 算法思想:反复平方的思想
- 算法步骤:
- 若要算 3^5mod 5
-
如果我们这样求模的话,最多需要logk次预处理,就可以成功算出来结果
-
java代码实现
import java.util.Scanner;
public class 快速幂 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine().trim());
for(int i=0;i<n;i++){
String [] s = in.nextLine().split(" ");
long a = Long.parseLong(s[0]);
long k = Long.parseLong(s[1]);
long p = Long.parseLong(s[2]);
long res =qmi(a,k,p);
System.out.println(res);
}
}
//快速幂算法 a^k mod p
static long qmi(long a,long k,long p){
long res = 1;
while(k!=0){
if((k&1)==1){
res = res * a % p;
}
k=k>>1;
a = a * a % p;
}
return res ;
}
}