二进制
例 37
7的二进制为 1 1 1
3(2^0)=3
3*(2^1)=6
3*(2^2)=12
最后加起来=21
参考快速幂的思想 若a*b中 b的最低位二进制==1 那么res就+上当前的a
模上p防止溢出
求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p的值。
数据范围
1≤a,b,p≤1018
输入样例:
3
4
5
输出样例:
2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,k,p;
int main()
{
cin>>a>>k>>p;
ll res=0;
while(k)
{
if(k&1) res=(res+a)%p;
k>>=1;
a=2*a%p;
}
cout<<res<<endl;
}