[备战NOI同步赛]快速幂模板(二分/位运算)
2014-07-03 21:57
302 查看
/* 快速幂模板 By:qpswwww(ZYK) 含二分快速幂、位运算快速幂 */ #define LONG long long int int MOD; //取模 LONG normalPow(LONG base,LONG pow) //二分法求base^pow快速幂 { if(pow==0) return 1; LONG out; out=normalPow(base,pow/2); out*=out; out%=MOD; if(pow&1) //pow为奇数,再乘一次base { out*=base; out%=MOD; } return out; } LONG fastPow(LONG base,LONG pow) //位运算求快速幂 { /* eg: 11<=> 1 0 1 1 2^3*1 2^2*0 2^1*1 2^0*1 */ int out=1; while(pow!=0) { if(pow&1) //这一位要乘 { out*=base; out%=MOD; } base*=base; pow>>=1; } return out; }
例题:BZOJ 1008 HNOI 2008 越狱
Description
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12Output
可能越狱的状态数,模100003取余Sample Input
2 3Sample Output
6HINT
6种状态为(000)(001)(011)(100)(110)(111)Source
题目的具体分析请看我的另一篇博文/article/8152082.html,这里只贴上使用快速幂模板的代码/* 快速幂模板 By:qpswwww(ZYK) 含二分快速幂、位运算快速幂 */ #include <stdio.h> #define LONG long long int int MOD; //取模 LONG normalPow(LONG base,LONG pow) //二分法求base^pow快速幂 { if(pow==0) return 1; LONG out; out=normalPow(base,pow/2); out*=out; out%=MOD; if(pow&1) //pow为奇数,再乘一次base { out*=base; out%=MOD; } return out; } LONG fastPow(LONG base,LONG pow) //位运算求快速幂 { /* eg: 11<=> 1 0 1 1 2^3*1 2^2*0 2^1*1 2^0*1 */ int out=1; while(pow!=0) { if(pow&1) //这一位要乘 { out*=base; out%=MOD; } base*=base; pow>>=1; } return out; } int main() { //结果:m^n-m*(m-1)^(n-1) LONG m,n,compSet,uniSet,ans; MOD=100003; scanf("%lld%lld",&m,&n); compSet=normalPow(m-1,n-1); uniSet=normalPow(m,n); compSet*=m; compSet%=MOD; ans=uniSet-compSet; if(ans<0) ans+=MOD; printf("%lld\n",ans); return 0; }
相关文章推荐
- [备战NOI同步赛]适合ACM-ICPC的并查集模板
- [备战NOI同步赛]Kruskal最小生成树模板
- [备战NOI同步赛]适合ACM-ICPC的高精度运算结构体Hugeint的实现
- [备战NOI同步赛]最短路模板
- [备战NOI同步赛]适合ACM-ICPC使用的进制转换模板
- 快速排序模板和二分查找
- (hdu1420)Prepared for New Acmer(快速幂运算模板)
- hdoj 1588 矩阵快速幂 二分等比数列求和模板
- 快速幂运算模板(求n^k以及前几位或后几位)
- [二分]取余运算||快速幂
- 【数学基础】【快速幂运算模板】
- Sumdiv(数论综合模板题:快速分解因式+快速幂取模+约数和公式+递归二分求等比数列和)
- 洛谷P3390【模板】矩阵快速幂——矩阵运算入门笔记
- 快速二分求幂 模板
- 矩阵运算,矩阵快速幂,模板
- 给大家分享一款自己编写的“智能增量网站快速同步”软件
- Microsoft Sync Framework下的快速开发同步程序
- 使用模板快速启动你的设计
- LINQ快速开发设计最佳实践(三) LINQ数据访问与业务逻辑层对象模板
- LINQ快速开发设计最佳实践(三) LINQ数据访问与业务逻辑层对象模板