快速幂及龟速乘
快速幂
关于幂运算
一般只会起循环暴力乘起来,这样复杂度会不会让人堪忧
虽然暴力乘也可以取模,但这样会不会慢呢
所以这就引来了快速幂取模运算(也可以不取模,仅加速)
#define ll long long
const int mod=1e9+7;
ll qpow(ll b,ll p) {//关于long long的话随便
ll a=1;
while(p) {
if(p&1) {//if(p%2==0)
a=a*b;//处理答案
//a%=mod;取模
}
b=b*b;//自乘(暴力乘)
//b%=mod;取模
p>>=1;//降幂p/=2;
}
return a%mod;
}
龟速乘
关于这个把O(1)变成O(logn)的玩意还是不能不要
毕竟谁也不想正数乘出负数
#define ll long long
const int mod=1e9+7;
ll qmul(ll b,ll p) {
ll a=0;//不同
while(p) {
if(p&1) {
a=a+b;//不同
//a%=mod;
}
b=b+b;//不同
//b%=mod;
p>>=1;
}
return a%mod;
}
对
我也感觉它俩很像
所以你就直接用就行了