题目大意
读入三个整数 $a$ , $b$ , $p$ ,求 $a * b$ % $p$ 。
数据范围
$1≤a,b,p≤10^18$
思路
类似于快速幂的方法。
我们知道 $a * b$ 相当于 $a$ 个 $b$ 相加。
快速幂是乘法,那么我们是不是可以考虑改乘为加呢?
代码
#include<bits/stdc++.h>
using namespace std;
long long a,b,p;
long long work(long long a,long long b)
{
long long ans=0;
while(b)
{
if(b&1)ans=(ans+a)%p;
a=2*a%p;
b>>=1;
}
ans%=p;
return ans;
}
int main()
{
cin>>a>>b>>p;
cout<<work(a,b);
return 0;
}
总结
此题说明有些题可以根据题目要求适当修改算法内容,以达到 $Accept$ 的目的。
此题可能还有其余方法,有兴趣的读者可以自己探索。
如果有什么问题,欢迎在评论区中指出。