快速乘(模板)
因為有時候乘法會溢出,即使是long long也可能在乘法時爆掉。而使用快速乘會很高效完成乘法操作并且不會爆long long
快速乘就是將它轉化為加法,不是一個一個的加,仿照2進制加法操作來完成(快速乘需要它為正數,不能為負數)
O(1)的快速乘
typedef long double ld; typedef long long LL; typedef unsigned long long ull; LL ksc(LL x, LL y, LL p){LL z = (ld)x / p * y;LL res = (ull)x *y - (ull)z * p;return (res + p) % p; }O(log)的快速乘
typedef long long LL; LL ksc(LL x, LL y, LL p){LL res = 0;while(y){if(y & 1) res = (res + x) % p;x = (x << 1) % p; //將x不斷乘2達到二進制y >>= 1;}return res; }?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 离散对数(同余理论-BSGS算法)
- 下一篇: 欧拉降幂及其扩展欧拉降幂