题目链接:

problem=1070">LightOJ 1070 Algebraic Problem

题意:已知a+b和ab的值求a^n+b^n。结果模2^64。

思路:

1.找递推式

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

得到递推式之后就是矩阵高速幂了

注意:模2^64,定义成unsigned long long 类型,由于无符号类型超过最大范围的数与该数%最大范围 的效果是一样的。

AC代码:

#include<stdio.h>
#include<string.h>
#define LL unsigned long long struct Matrix {
LL m[10][10];
};
LL n;
Matrix geti(LL n) {
LL i;
Matrix b;
memset(b.m,0,sizeof b.m);
for(i=0;i<2;i++)
b.m[i][i]=1;
return b;
} Matrix matrixmul(Matrix a,Matrix b) {
LL i,j,k;
Matrix c;
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
c.m[i][j]=0.0;
for(k=0;k<2;k++) {
c.m[i][j]+=(a.m[i][k]*b.m[k][j]);
}
}
}
return c;
} Matrix quickpow(Matrix a,LL p) {
Matrix m=a;
Matrix b=geti(n);
while(p) {
if(p%2)
b=matrixmul(b,m);
p/=2;
m=matrixmul(m,m);
}
return b;
} int main() {
LL t;
LL p,q;
int cas=1;
Matrix pp,init,ans;
//printf("%llu\n",kmod);
scanf("%llu",&t);
while(t--) {
scanf("%llu %llu %llu",&p,&q,&n);
memset(pp.m,0,sizeof pp);
pp.m[0][0]=p;
pp.m[0][1]=1;
pp.m[1][0]=-q;
pp.m[1][1]=0; init.m[0][0]=p;
init.m[0][1]=2;
init.m[1][0]=0;
init.m[1][1]=0; printf("Case %d: ",cas++);
if(n==0){
printf("%llu\n",init.m[0][1]);
}
else if(n==1){
printf("%llu\n",init.m[0][0]);
}
else {
ans=quickpow(pp,n-1);
ans=matrixmul(init,ans);
printf("%llu\n",ans.m[0][0]);
}
}
return 0;
}
/* */

LightOJ 1070 Algebraic Problem (推导+矩阵高速幂)的更多相关文章

  1. LightOJ 1070 - Algebraic Problem 推导+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1070 思路:\({(a+b)}^n =(a+b){(a+b)}^{n-1} \) \(( ...

  2. LightOJ 1070 Algebraic Problem:矩阵快速幂 + 数学推导

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1070 题意: 给你a+b和ab的值,给定一个n,让你求a^n + b^n的值(MOD ...

  3. LightOJ 1070 - Algebraic Problem 矩阵高速幂

    题链:http://lightoj.com/volume_showproblem.php?problem=1070 1070 - Algebraic Problem PDF (English) Sta ...

  4. HDU 1757 A Simple Math Problem(矩阵高速幂)

    题目地址:HDU 1757 最终会构造矩阵了.事实上也不难,仅仅怪自己笨..= =! f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a9 ...

  5. hdu 1757 A Simple Math Problem (矩阵高速幂)

    和这一题构造的矩阵的方法同样. 须要注意的是.题目中a0~a9 与矩阵相乘的顺序. #include <iostream> #include <cstdio> #include ...

  6. LightOJ - 1132 Summing up Powers 矩阵高速幂

    题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...

  7. HDU 2256 Problem of Precision(矩阵高速幂)

    题目地址:HDU 2256 思路: (sqrt(2)+sqrt(3))^2*n=(5+2*sqrt(6))^n; 这时要注意到(5+2*sqrt(6))^n总能够表示成an+bn*sqrt(6); a ...

  8. [POJ 3150] Cellular Automaton (矩阵高速幂 + 矩阵乘法优化)

    Cellular Automaton Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 3048   Accepted: 12 ...

  9. HDOJ 4686 Arc of Dream 矩阵高速幂

    矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/ ...

随机推荐

  1. 登录安全验证+AJAX认证服务--流程图

  2. LOJ #109. 并查集

    内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论 1 测试数据   题目描述 这是一道模板题. 维护一个 nnn 点 ...

  3. vue中makeMap方法的使用 (定义注册一些值 后期方便使用)

    function makeMap ( str, expectsLowerCase ) { var map = Object.create(null); var list = str.split(',' ...

  4. UVa 208 Firetruck【回溯】

    题意:给出一个n个节点的无向图,以及某个节点k,按照字典序从小到大输出从节点1到节点k的所有路径 看的题解 http://blog.csdn.net/hcbbt/article/details/975 ...

  5. 51Nod 天堂里的游戏

    多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. Noder躺在草地上漫无目的的张望,二楼的咖啡馆在日光下闪着亮,像是要进化成一颗巨大的咖啡豆.天气稍有些冷,但草还算暖和.不远的地方坐着一 ...

  6. TrueOS 不再想要成为“桌面 BSD”了

    作者: John Paul Wohlscheid 译者: LCTT geekpi | 2018-07-13 22:53 TrueOS 很快会有一些非常重大的变化.今天,我们将了解桌面 BSD 领域将会 ...

  7. JAVA版本区块链钱包核心代码

    Block.java package com.ppblock.blockchain.core; import java.io.Serializable; /** * 区块 * @author yang ...

  8. 紫书 例题 10-16 UVa 12230(数学期望)

    感觉数学期望的和化学里面求元素的相对原子质量的算法是一样的 就是同位素的含量乘上质量然后求和得出 这道题因为等待时机是0到2*l/v均匀分配的,所以平均时间就是l/v 再加上过河的l/v, 最后加上步 ...

  9. qt 闰年

    bool QDate::isLeapYear ( int year ) [static]

  10. mysql生成随机时间

    mysql> update test set create_time=concat('2013-10-01 ', floor(10+rand()*10),':',floor(10+rand()* ...