java快速幂算法

2019-04-13 21:40发布

先来看看公式吧公式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; }