【蓝桥杯集训22】快速幂(1 / 3)

目录

875. 快速幂


875. 快速幂

活动 - AcWing

题目:

快速求\large a^{b}%p的值

思路:

1、先预处理出 \large a^{2^{0}},a^{2^{1}},a^{2^{2}},......,a^{2^{logb}} 这b个数

2、将 \large a^{b}用 \large a^{2^{0}},a^{2^{1}},a^{2^{2}},......,a^{2^{logb}} 这b个数来组合

     即组合成 \large a^{b}=a^{2^{x_{1}}}\times a^{2^{x_{2}}}\times a^{2^{x_{3}}}......a^{2^{x_{t}}}

     \large =a^{2^{x_{1}}+2^{x_{2}}+...+2^{x_{t}}}

b可以用二进制数来表示

import java.util.*;

class Main
{   
    public static long qmi(long a,long b,long p)
    {
        long res=1;
        while(b!=0)
        {
            if((b&1)==1) res=res*a%p;
            b>>=1; //b右移一位
            a=a*a%p; //更新a,a依次为a^{2^0},a^{2^1},a^{2^2},....,a^{2^logb}
        }
        return res;
    }
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        while(n-->0)
        {
            int a=sc.nextInt(),k=sc.nextInt(),p=sc.nextInt();
            System.out.println(qmi(a,k,p));
        }
    }
}

 

你可能感兴趣的:(蓝桥杯集训,蓝桥杯,java,快速幂,数论,算法)