#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll b,p,k;
ll qmi(ll b,ll p,ll k)//开long long
{
ll res = 1; //初始化
while(p)
{
if(p&1)//检查是否为奇数
{
res=res*b%k; //%k
}
b=b*b%k;//倍增;//&k
p>>=1; 左移运算符号
}
return res;
}
int main()
{
cin>>b>>p>>k;
cout<<qmi(b,p,k)<<endl;
return 0;
}

b/2 向下取整==(b-1)/2 
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
//当指数为偶数的时候直接将指数/2,底数平方
//当指数为奇数的时候,先将ans乘这个底数,然后将底数平方,指数/2
ll qmi(ll a,ll b,ll p)//ll 防止溢出
{
ll res=1; //初值
while(b)//b!=0
{
if(b&1)res=res*a%p; //判断b是否为奇数
a=a*a%p,b>>=1;//b=b>>1;
}
return res;
}
int main()
{
int t;cin>>t;
for(int i=1;i<=t;i++)
{
ll n,m,p;cin>>n>>m>>p;
cout<<qmi(n,m,p)<<'\n';//表示n的m次幂对p取模
}
return 0;
}

1416

被折叠的 条评论
为什么被折叠?



