高速乗算の目的:a * b%modを計算すると、a * bはlonglongより大きくなります。
基本原理:コンピューターでの計算と加算の速度は、乗算よりもはるかに速いことがよくあります。高速乗算は、a * bを多項式に分解し、それらを乗算の分配法則によって加算することです。
日付を取ります:20 * 13、13をバイナリ1101に変換すると、20 * 2 ^ 0 + 20 * 2 ^ 2 + 20 * 2 ^ 3になります。(高速電力と同様)
ll quick_mulitiply(ll a,ll b,ll mod) {
ll res=0;
while(b) {
if(b&1) res=(res+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return res;
}