uva 10655 Contemplation! Algebra(矩阵快速幂)
来源:互联网 发布:淘宝活动第三方平台 编辑:程序博客网 时间:2024/05/17 04:34
题意:
给出p=a+b ,q=a*b ,n
求 a^n+b^n
思路:
由于在矩阵快速幂的专题里
一开始就想
a2+b2 =(a+b)(a+b)-2ab
又往下推
发现
a3+b3=(a2+b2)(a+b)-a2b-ab2
=(a2+b2)(a+b)-(a+b)ab
又继续往下推
#include<bits/stdc++.h>#define N 1000000007#define M 2struct node{long long a[M][M];};node cheng(node a,node b){node c;memset(c.a,0,sizeof(c.a));for(int i=0;i<M;i++)for(int j=0;j<M;j++)for(int k=0;k<M;k++)c.a[i][j]=(c.a[i][j]+(a.a[i][k]*b.a[k][j]));return c;}long long f(long long a,long long b){long long ans=1;while(b){if(b&1) ans=(ans*a)%N;a=(a*a)%N;b>>=1;}return ans;}int main(){long long p,q,n;node x,y;while(~scanf("%lld%lld%lld",&p,&q,&n),p+q+n) //p=a+b q=a*b;{memset(x.a,0,sizeof(x.a));memset(y.a,0,sizeof(y.a));x.a[0][0]=p;x.a[0][1]=2;y.a[0][0]=p;y.a[1][0]=-q;y.a[0][1]=1;if(n==0) {printf("2\n");continue;}if(n==1){printf("%lld\n",p);continue;}n--;while(n){if(n&1)x=cheng(x,y);y=cheng(y,y);n>>=1;}printf("%lld\n",x.a[0][0]);}}
阅读全文
0 0
- uva 10655 Contemplation! Algebra 矩阵快速幂
- UVA 10655 - Contemplation! Algebra(矩阵快速幂)
- uva 10655 - Contemplation! Algebra(矩阵快速幂)
- UVA-10655 Contemplation! Algebra (矩阵快速幂)
- UVA 10655 Contemplation! Algebra(矩阵快速幂)
- UVA 10655 Contemplation! Algebra (矩阵快速幂)
- UVA 10655 Contemplation! Algebra(构造矩阵和快速幂)
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- UVA 10655 Contemplation! Algebra(矩阵乘法)
- 【矩阵快速幂+输入终止条件判断】Contemplation! Algebra UVA
- uva 10655 - Contemplation! Algebra 【矩阵快速幂】【最坑的输入】
- UVA 10655 Contemplation! Algebra(矩阵乘法)
- UVA 10655 Contemplation! Algebra(构造矩阵)
- Contemplation! Algebra(矩阵快速幂,uva10655)
- Uva10655 Contemplation! Algebra矩阵快速幂
- UVA 10655 Contemplation! Algebra
- UVA 10655 Contemplation! Algebra
- 并发delete导致oracle死锁问题的解决
- ~引用及与指针的区别/联系~
- fork仓库流程
- KMP
- zabbix 配置邮件报警
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- centos7.2 安装poco
- CE6870 添加ipv6 策略路由失败问题解决
- 2017-8-16考试题
- 调用第三方接口~支付宝
- extjs-添加对应的组件
- [编程题] 独立的小易
- C++入门(作为大概了解)
- python 循环