0x00 基本算法
0x01位运算
例题:Acwing 89. a^b
求a的b次方对p取模。
将b的二进制表示中的每一位进行计算。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,p,ans;
int main()
{
scanf("%lld%lld%lld",&a,&b,&p);
if(b==0) printf("%d",1%p);
else
{
ans=1;
while(b)
{
if(b&1)
{
ans=ans*a%p;
}
b>>=1;
a=a*a%p;
}
printf("%lld",ans);
}
return 0;
}
例题:Acwing 90. 64位整数乘法
求a乘b对p取模
同上
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,p,k;
ll ans;
int main()
{
scanf("%lld%lld%lld",&a,&b,&p);
while(b)
{
if(b&1)
{
ans=(ans+a)%p;
}