先来看看公式吧公式1. a^b mod c = (a mod c)^b mod c 公式2. (1)偶数 a^b mod c = (a^2)^(b/2) mod c(2)奇数 a^b mod c = ((a^2)^(b/2)*a) mod c很明显公式2是可以递推的推论公式:a^b mod c = (a^2 mod c)^(b/2) mod c
思路已经比较清晰了,那么具体的算法该如何实现呢 package a51modWeb.acm;
import java.util.Scanner;
public class M1046 {
public static void main(String[] args) {
//快速幂公式
//a^b mod c = (a mod c)^b mod c
Scanner in = new Scanner(System.in);
long a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
long cj = 1;
a = a%c;//先缩小范围,怕范围溢出
while(b!=0) {
if(b%2==1)//奇数--且肯定有一时候到1
cj = (cj * a)%c;
a = (a*a)%c;//还是怕溢出的问题
b = b/2;
}
System.out.println(cj);
}
}
以下是快速幂的模板:public static long quickPower(long a,int b,int c) {
long cj = 1;
a = a%c;//缩小
while(b!=0) {
if(b%2==1)
cj = (cj * a) % c;
a = (a * a)%c;
b = b/2;
}
return cj;
}