HDU 5187 zhx's contest(快速乘法)
2015-03-23 15:35
344 查看
题目地址:HDU 5187
分凸型与凹型讨论,对于每一种来说,分别有C(n-1,0)+C(n-1,1)+…+C(n-1,n-1)=2^(n-1)种情况,然后合起来共2^n种情况,有两种重复的,所以共2^n-2中情况。于是快速幂,但是由于mod为LL 型,在快速幂过程中会爆LL。所以在快速幂的乘法时,用快速乘法,原理跟快速幂一模一样。
代码如下:
分凸型与凹型讨论,对于每一种来说,分别有C(n-1,0)+C(n-1,1)+…+C(n-1,n-1)=2^(n-1)种情况,然后合起来共2^n种情况,有两种重复的,所以共2^n-2中情况。于是快速幂,但是由于mod为LL 型,在快速幂过程中会爆LL。所以在快速幂的乘法时,用快速乘法,原理跟快速幂一模一样。
代码如下:
#include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #include <stdio.h> using namespace std; #define LL __int64 #define pi acos(-1.0) LL mod; const int INF=0x3f3f3f3f; const double eqs=1e-9; const int MAXN=1100000; LL Mult(LL n, LL k) { LL ans=0; while(k>0){ if(k&1) ans=(ans+n)%mod; k>>=1; n=(n+n)%mod; } return ans; } LL qsm(LL n, LL k) { LL ans=1; while(k>0){ if(k&1) ans=Mult(ans,n)%mod; k>>=1; n=Mult(n,n)%mod; } return ans; } int main() { LL n, ans; while(scanf("%I64d%I64d",&n,&mod)!=EOF){ if(n==1){ printf("%I64d\n",1%mod); continue ; } ans=qsm(2,n); printf("%I64d\n",(ans+mod-2)%mod); } return 0; }
相关文章推荐
- hdu 5187 zhx's contest(快速幂,快速乘法,排列组合)
- hdu 5187 zhx and contest(快速幂、快速乘法)
- HDU 5187 zhx's contest(快速幂乘法)
- hdu 5187 zhx's contest 快速幂,快速乘
- zhx's contest HDU - 5187 快速乘,解决乘数过大
- zhx's contest (hdu 5187 快速幂+快速乘法)
- hdu 5187 zhx's contest(快速幂+快速乘)
- HDU 5187 zhx's contest(思维,快速幂,快速乘)
- HDU 5187 zhx's contest(快速幂+快速乘法)
- [HDU 5187][组合数求和][快速幂+乘]zhx's contest
- HDU 5187-zhx's contest(快速乘法+快速幂取模)
- hdu 5186 zhx's submissions 5187 zhx's contest快速幂小优化
- Hdu 5187 zhx's contest【思维+快速幂+快速乘】
- hdu 5187 zhx's contest [ 找规律 + 快速幂 + 快速乘法 || Java ]
- HDU 5187 zhx's contest 快速幂,快速加
- hdu 5187 快速乘方 快速乘法
- HDU - 5187 - zhx's contest
- HDU - 5187 - zhx's contest (快速幂+快速乘)
- BestCoder Round #33(zhx's contest-快速乘法)
- HDU - 5187 zhx's contest