875 快速幂
快速幂就是将a^k看做是a^2^0和a^2^1……相乘。(相邻两个数是平方关系)
巧妙的是这个时候k就是多个2^n的组合,也就是可以二进制表示。
所以就可以用k的二进制某一位是否为1,判断最后的结果是否乘以a^2^n。
错误点:权值不用初始化直接使用a,每次循环将a平方。
#include<bits/stdc++.h>
using namespace std;
//875 快速幂
typedef long long LL;
LL a,b,p;
int n;
LL qum(int a,int n,int p)
{
LL ans=1;
while(n)
{
if(n&1)
{
ans=ans*a%p;
}
a=(LL)a*a%p;
n>>=1;
}
return ans;
}
int main()
{
int n;
cin>>n;
while(n--)
{
cin>>a>>b>>p;
cout<<qum(a,b,p)<<endl;
}
}
3625 幂次方
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
//3625 幂次方
LL a,b,p;
LL qum(LL a,LL b)
{
LL ans=1;
while(b)
{
if(b&1)
{
ans=ans*a%2333