Acwing 875. 快速幂

题目:
给定 n 组 ai,bi,pi,对于每组数据,求出 abiimodpi的值。

输入格式
第一行包含整数 n。

接下来 n 行,每行包含三个整数 ai,bi,pi。

输出格式
对于每组数据,输出一个结果,表示 abiimodpiaibimodpi 的值。

每个结果占一行。

数据范围
1≤n≤1000001≤n≤100000,
1≤ai,bi,pi≤2×109

题解:(求a的b次幂 % p)

b&1就是判断b的二进制表示中第0位上的数是否为1,若为1,b&1=true,反之b&1=false

代码:

#include 
#include 

using namespace std;

typedef long long LL;

//a^k %p
int qmi(int a,int k, int p)
{
    int res =1;
    while(k)
    {
        if(k & 1) res =(LL)res * a % p;
        k >>= 1;
        a =(LL)a * a % p;
   }
    return res;
}
int main()
{    int n; 
     scanf("%d", &n);
     while(n--)
     {
         int a ,k ,p;
     scanf("%d%d%d",&a,&k,&p);
     printf("%d\n",qmi(a,k,p));

     }
    return 0;
}

你可能感兴趣的:(Acwing,算法,c++,数据结构)