生活随笔
收集整理的這篇文章主要介紹了
数学--数论--快速乘法+快速幂
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.快速冪(快速模冪)
①求a^b:
int pow(int a
, int k
) { int ans
= 1;while(k
) {if(k
&1) ans
*= a
; a
*= a
;k
>>=1; }return ans
;
}
②求a
^b
%p
int pow_mod(int a
, int k
,int mod
) { int ans
= 1%mod
;while(k
) {if(k
&1) ans
=(long long) ans
*a
%mod
; a
= (long long)a
*a
%mod
;k
>>=1; }return ans
;}
例題:BZOJ1008
2.快速乘法
方法①
long long quickMul(long long a
,long long b
,long long mod
)
{long long ans
=0;while(b
){if(b
&1) ans
=(ans
+a
)%mod
;a
=(a
+a
)%mod
; b
>>=1;}return ans
;
}方法②:高效算法
long long quickMul(long long a
,long long b
,long long mod
)
{a
%=mod
;b
%=mod
;long long ans
=0;while(b
){if(b
&1){ans
+=a
;if(ans
>=mod
)ans
-=mod
;}b
>>=1;a
<<=1;if(a
>=mod
) a
-=mod
;}return ans
;
}方法③:使用
long double優(yōu)化版
long long quickMul(long long a
,long long b
,long long mod
)
{a
%=mod
;b
%=mod
;long long c
=(long double) a
*b
/mod
;long long ans
=a
*b
-c
*mod
;if(ans
<0) ans
+=mod
;else if(ans
>=mod
) ans
-=mod
;return ans
}
總結(jié)
以上是生活随笔為你收集整理的数学--数论--快速乘法+快速幂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。