题目描述:
求 aa 乘 bb 对 pp 取模的值。
输入格式
第一行输入整数aa,第二行输入整数bb,第三行输入整数pp。
输出格式
输出一个整数,表示a*b mod p
的值。
数据范围
1≤a,b,p≤10181≤a,b,p≤1018
输入样例:
3
4
5
输出样例:
2
a*b就是b个a相加
a+a+a+a+a+....+a
a*1=a;
a*2=2a
a*3=3a
a*4=4a
a*8=8a
4a可以由2a得到
8a可以由4a得到
a*(2^k)=2^k*a
AC代码:
#include<iostream>
using namespace std;
typedef unsigned long long ull;
int main()
{
ull a,b,p;
cin>>a>>b>>p;
ull ans=0;//定义一定要用ull,不然会wa
while(b)
{
if(b&1)
ans=(ans+a)%p;
a=a*2%p;
b>>=1;
}
cout<<ans<<endl;
return 0;
}