64位整数乘法
题目描述
求 a 乘 b 对 p 取模的值,其中 1≤a,b,p≤10^18。
输入
第一行a,第二行b,第三行p。
输出
一个整数,表示a*b mod p的值。
样例输入
2
3
9
样例输出
6
#include <iostream> using namespace std; int main() { long long int a,b,p; cin>>a>>b>>p; long long int ans = 0; int flag = 1; if(a<0) { flag = -flag; } if(b<0) flag = -flag; while(b!=0) { if(b&1!=0) { ans = (ans+a)%p; } a = (a*2)%p; b>>=1; } cout<<ans; }
与快速幂类似
b=ck-12k-1+ck-22k-2+…+c020
a×b=a×(ck-12k-1+ck-22k-2+…+c020)=a×ck-1×2k-1+a×ck-2×2k-2+…+a×c0×20