刷书笔记1 : a^b%p
原题链接:https://www.acwing.com/problem/content/91/
ll power(int a,int b,int p)
{//a^b mod p
ll ans = 1%p;
for(; b; b>>=1)
{
if(b&1) ans = (ll)ans*a%p; //当可能越界时 :要显式强制调用64位寄存器
a = (ll)a*a%p;
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);//关闭同步流
int a,b,p;
cin>>a>>b>>p;
cout<<power(a,b,p)<<endl;
return 0;
}
- 主要思想 : 位运算
将b用二进制表示 比如b = 10: 1010
则 a^b == a^8 *a^2
那么 ans 只需要 把每一位的 a次方相乘就好,