<—点个赞吧QwQ
宣传一下算法提高课整理{:target=”_blank”}
求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p
的值。
数据范围
1lea,b,ple1018
输入样例:
3
4
5
输出样例:
2
思路
我们考虑将b进行二进制拆分:b=2a1+2a2+2a3…
而乘法有乘法分配律,取余也有类似的性质
所以:a×bmod
我们只要从小到大枚举a×2^n,当b的二进制位含有2^n,答案加上a×2^n\bmod p的值即可
代码
#include <iostream>
using namespace std;
typedef long long LL;
LL mul (LL a,LL b,LL p) {
LL ans = 0;
while (b) {
if (b & 1) ans = (ans + a) % p;
a = (a << 1) % p;
b >>= 1;
}
return ans;
}
LL a,b,p;
int main () {
cin >> a >> b >> p;
cout << mul (a,b,p) << endl;
return 0;
}
#include <iostream> using namespace std; long long a, b, p, c; int main () { cin >> a >> b >> p, cout << (long long) ((__int128) a * b % p); return 0; }
#include <iostream> using namespace std; unsigned long long a, b, p, c; int main () { cin >> a >> b >> p, c = (long double) a * b / p, cout << a * b - c * p; return 0; }
print(pow(*map(int, input().split())))
######
狂笑(逃\% \% \%