算法基础之快速幂

快速幂

  • 核心思想:logk的复杂度求出ak mod p

    • 将k拆成若干个2的n之和 (二进制)

    • 算法基础之快速幂_第1张图片

    •   #include
        #include
        
        using namespace std;
        typedef long long LL;
        
        LL qmi(int a,int k,int p)
        {
            LL res = 1 % p;
            while(k)  //k转为二进制 还有正数 就进行
            {
                if(k & 1) res = res * a % p;  //k个位为1 需要乘上
                k >>= 1;
                a = (LL)a *a %p;  //强转成LL 否则会爆
            }
            
            return res;
        }
        
        int main()
        {
            int n;
            cin>>n;
            
            while(n--)
            {
                int a,k,p;
                cin>>a>>k>>p;
                cout<<qmi(a,k,p)<<endl;
            }
        }
      

你可能感兴趣的:(算法,数据结构,c++,散列表,图论)