码迷,mamicode.com
首页 > 其他好文 > 详细

快速幂(含二阶方阵类)模板

时间:2014-10-04 00:50:45      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   数据   sp   div   c   on   


整体在一个命名空间POW中,使用时应加上POW :: ****

 

 1 namespace POW{
 2     typedef int t; //使用时可将"int"修改为矩阵中存储的数据类型
 3     const t MOD = t(1e9 + 7);//改为快速幂要求的模数
 4     
 5     template <class T>
 6         T powmod(T a, int n, T mod){
 7             T ans = a;
 8             --n;
 9             while(n){
10                 if(n & 1)ans = ans * a % MOD;
11                 a = a * a % MOD;
12                 n >>= 1;
13             }
14             return ans;
15         }
16     //powmod(T a, int n, T mod)
17     
18     struct Mat{
19         t a, b, c, d;//需要时可以改成二维数组并修改下面函数
20         Mat(t w,t x,t y,t z):a(w),b(x),c(y),d(z){}
21         Mat operator *(Mat &B)const{
22             t w, x, y, z;
23             w = (((LL)a * B.a)%MOD + ((LL)b * B.c)%MOD)%MOD;
24             x = (((LL)a * B.b)%MOD + ((LL)b * B.d)%MOD)%MOD;
25             y = (((LL)c * B.a)%MOD + ((LL)d * B.c)%MOD)%MOD;
26             z = (((LL)c * B.b)%MOD + ((LL)d * B.d)%MOD)%MOD;
27             return Mat(w, x, y, z);
28         }
29     };//struct Mat
30     
31 }//namespace POW

快速幂(含二阶方阵类)模板

标签:style   blog   color   使用   数据   sp   div   c   on   

原文地址:http://www.cnblogs.com/Asm-Definer/p/4005442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!