快速幂

快速幂

取模的运算法则

  1. (a + b) % p = (a % p + b % p) % p 

  2. (a - b) % p = (a % p - b % p ) % p 

  3. (a * b) % p = (a % p * b % p ) % p 

例如求2的5次方 5可以拆成1和4 对应5的二进制数0101

//求a的b模p的值(二进制写法)
public class 快速幂 {
    static int a;//底数
    static int b;//指数
    static int p;
     public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        a=sc.nextInt();    
        b=sc.nextInt();
        p=sc.nextInt();
        int res=1;
        while(b>0){
            if((b&1)%2==1){ //遇到1就累乘现在的幂
                res=(res*a)%p;
            }
            //每移位一次,幂累乘一次(不管取不取这个数)
            a *= a; 
            //指数右移一位
            b   >>= 1;
        }
        System.out.println(res);
    }
}

  

 
posted @ 2021-03-20 17:23  nb小歪  阅读(35)  评论(0)    收藏  举报