龟速乘 & 快速乘

龟速乘,就是用来解决long long * long long % MOD 时long long * long long会爆炸但%MOD之后不会爆炸

1 inline LL Slow(LL L,LL R,LL M) {
2     L=(L%M+M)%M; 
3     R=(R%M+M)%M;//我也不知道为什么 
4     LL Res=L*R-(LL)((LD)L/M*R+1e-8)*M;
5     return Res<0 ? Res+M : Res; 
6 }

快速乘,与龟速乘同理,只是是按快速幂的形式改变的

代码:

 1 long long quick_mul(long long x,long long y,long long mod) 
 2 {
 3     long long ans=0;
 4     while(y!=0){
 5         if(y&1==1)ans+=x,ans%=mod;
 6         x=x+x,x%=mod;
 7         y>>=1; 
 8     }
 9     return ans;
10 }

猜你喜欢

转载自www.cnblogs.com/DeNeRATe/p/12219645.html