POJ 3070 矩阵快速幂
来源:互联网 发布:卸载软件残留 编辑:程序博客网 时间:2024/05/17 03:32
矩阵幂模;
可以参考:
HDU 1420 蒙哥马利幂模算法
不同之处,在于,一个是 数字,一个是矩阵;原理都一样;
/* *problem ID: POJ 3070 * Author ID: fuqiang * TIME: 2013-07-17 * Algorithm: 幂模 * Status: (Accept) */ #include <iostream>#include <cstdio>#include <string>#include <cstring>#include <cstdlib>using namespace std;#define maxn 2struct matrix //矩阵 {__int64 arr[maxn][maxn];}origin,res;matrix multiply(matrix a, matrix b) //矩阵乘法 {matrix temp;memset(temp.arr,0,sizeof(temp.arr));for(int i = 0; i < maxn; i++){for(int j = 0; j < maxn; j++){for(int k = 0; k < maxn; k++){temp.arr[i][j] += a.arr[i][k]*b.arr[k][j];}}}return temp;}inline void mod_1w(matrix & k) //mod 10000 {for(int i = 0; i < maxn; i++){for(int j = 0; j < maxn; j++){k.arr[i][j] %= 10000;}}}matrix caclo(matrix a,int n,matrix k) //快速幂模 {mod_1w(a);while(n){if(n&1){k = multiply(k,a);mod_1w(k);}a = multiply(a,a);mod_1w(a);n >>= 1;}return k;}void InIt(){origin.arr[0][0] = origin.arr[0][1] = origin.arr[1][0] = 1;origin.arr[1][1] = 0;memset(res.arr,0,sizeof(res.arr));for(int i = 0; i < maxn; i++) //置为单位阵 res.arr[i][i] = 1;}int main(){int n;while(scanf("%d",&n)!=EOF){if(n==-1)break;InIt();matrix ans = caclo(origin,n,res);printf("%I64d\n",ans.arr[0][1]);}return 0;}
- POJ 3070 矩阵快速幂
- poj 3070 矩阵快速幂
- poj 3070(矩阵快速幂)
- poj 3070 矩阵快速幂
- 矩阵快速幂 poj 3070
- POJ 3070 矩阵快速幂
- POJ 3070 矩阵快速幂
- POJ 3070 矩阵快速幂
- poj 3070 矩阵快速幂
- POJ 3070 矩阵快速幂
- poj 3070 矩阵快速幂
- 矩阵快速幂POJ-3070
- poj 3070 矩阵快速幂
- 矩阵快速幂 poj 3070
- POJ 3070 (矩阵快速幂,矩阵快速幂求斐波那契)
- POJ 3070 Fibonacci 矩阵快速幂
- poj 3070(矩阵的快速幂)
- poj - 3070 - Fibonacci(矩阵快速幂)
- Eclipse换肤插件
- struts2通过annotation实现零配置
- oracle换行符
- mysql表分区
- 史上20大计算机病毒
- POJ 3070 矩阵快速幂
- Validate Binary Search Tree
- Filter入门
- 实现指定顺序排序
- android-jni 常用网址
- sitemesh模板技术
- hdu 1041 找规律
- 收藏网站
- oracle 11g 安装过程(fedora )