HDU 2256 Problem of Precision 数论矩阵快速幂

题目要求求出(√2+√3)2n的整数部分再mod 1024。
(√2+√3)2n=(5+2√6)n
如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果。
我们发现(5+2√6)n+(5-2√6)n是一个整数(2√6的奇数次幂总会正负抵消掉),并且(5-2√6)n是小于1的。所以我们就只需要求出S(n)-1即可。令
An=(5+2√6)n; Bn=(5-2√6)n.
Sn=An+Bn Sn为整数。
Sn*((5+2√6)+(5-2√6))=Sn*10
Sn*10=(5+2√6)n+1+(5-2√6)n+1+(5+2√6)n-1+(5-2√6)n-1
Sn*10=Sn+1+Sn-1
递推式:Sn=10*Sn-1-Sn-2
然后转化为矩阵快速幂求Sn
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int Mod=;
const int N=;
struct Mat
{
int mat[N][N];
}a;
Mat Multiply(Mat a, Mat b)
{
Mat c;
memset(c.mat, , sizeof(c.mat));
for(int k = ; k < ; ++k)
for(int i = ; i < ; ++i)
if(a.mat[i][k])
for(int j = ; j < ; ++j)
if(b.mat[k][j])
c.mat[i][j] = (c.mat[i][j] +a.mat[i][k] * b.mat[k][j])%Mod;
return c;
}
Mat QuickPower(Mat a, int k)
{
Mat c;
memset(c.mat,,sizeof(c.mat));
for(int i = ; i < ; ++i)
c.mat[i][i]=;
for(; k; k >>= )
{
if(k&) c = Multiply(c,a);
a = Multiply(a,a);
}
return c;
}
void InitMat(Mat &A)
{
A.mat[][]=; A.mat[][]=-;
A.mat[][]=; A.mat[][]=;
}
int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
if(n==)
printf("9\n");
else if(n==)
printf("97\n");
else
{
InitMat(a);
a=QuickPower(a,n-);
int ans=(a.mat[][]*+a.mat[][]*-)%; //我们求的是S[n]-1
while(ans<) ans+=;
printf("%d\n",ans);
}
}
return ;
}
HDU 2256 Problem of Precision 数论矩阵快速幂的更多相关文章
- HDU 2256 Problem of Precision (矩阵快速幂)(推算)
Problem of Precision Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 2256 Problem of Precision( 矩阵快速幂 )
链接:传送门 题意:求式子的值,并向下取整 思路: 然后使用矩阵快速幂进行求解 balabala:这道题主要是怎么将目标公式进行化简,化简到一个可以使用现有知识进行解决的一个过程!菜的扣脚...... ...
- HDU 2256 Problem of Precision (矩阵乘法)
Problem of Precision Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- CF954F Runner's Problem(动态规划,矩阵快速幂)
CF954F Runner's Problem(动态规划,矩阵快速幂) 题面 CodeForces 翻译: 有一个\(3\times M\)的田野 一开始你在\((1,2)\)位置 如果你在\((i, ...
- hdu 2256 Problem of Precision
点击打开hdu 2256 思路: 矩阵快速幂 分析: 1 题目要求的是(sqrt(2)+sqrt(3))^2n %1024向下取整的值 3 这里很多人会直接认为结果等于(an+bn*sqrt(6))% ...
- 数学--数论--HDU 2802 F(N) 公式推导或矩阵快速幂
Giving the N, can you tell me the answer of F(N)? Input Each test case contains a single integer N(1 ...
- HDU 3292 【佩尔方程求解 && 矩阵快速幂】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...
- HDU 2855 斐波那契+矩阵快速幂
http://acm.hdu.edu.cn/showproblem.php?pid=2855 化简这个公式,多写出几组就会发现规律 d[n]=F[2*n] 后面的任务就是矩阵快速幂拍一个斐波那契模板出 ...
- HDU 5950:Recursive sequence(矩阵快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:给出 a,b,n,递推出 f(n) = f(n-1) + f(n-2) * 2 + n ^ 4. f ...
随机推荐
- [转]LINQ To SQL 语法及实例大全
转载自:http://blog.csdn.net/pan_junbiao/article/details/7015633 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过 ...
- Spring4 MVC Hibernate4集成
Spring4 MVC Hibernate4集成 一. 本文所用环境 Spring4.0.3.RELEASE Hibernate4.3.5.Final Mysql 二. 工程目录 三. ...
- Android网络访问库 - Retrofit学习(1)基础
Retrofit是什么 Retrofit是一个类型安全的HTTP客户端,支持Android和Java.它是Square公司开源的项目,当前版本2.0. 在实际开发中,我们Retrofit配合OKHTT ...
- MTNET 自用ios网络库开源
短短两天就在https://git.oschina.net/gangwang/MTNET这里收获15个星 github 5星, 值得收藏! MTNET 自用ios网络库开源, 自用很久了,在数歀上架的 ...
- 小兔伴伴家庭动物园AR智能早教产品上市
2016年6月,经过乐卓大家庭所有人的共同努力,公司旗下首款新品——小兔伴伴之<家庭动物园>3D智能学习卡正式面世. 每个孩子都应该在合适的时间去体验丰富的声音.色彩和动作,<家庭动 ...
- ios开发人员mac空间不够用的解决办法
有时候,当我们的mac硬盘空间不够用的时候,我们查看“用户”文件夹,发现这个文件夹占用了很大的存储空间,可是当我们一个一个查看这个文件夹下的子文件夹所占的存储空间大小并把这些存储空间大小加起来的时候却 ...
- 【资源下载】Ext4.1.0_Doc中文版_V1.0.0_Beta正式提供下载!
*************************************************重要提示: 在2014年1月1日前一天,历时两年左右的时间,翻译小组终于完成了该API的翻译.可喜可贺 ...
- DMSFrame 之简单用法(一)
1.DMSFrame是一个完整的ORM框架,框架相对来说也比成熟了.使用上有些地方还是比较方便的.DLL文件大约300K左右,但却可以支持各种方式的查询,完全的LINQ化的方式书写代码,更有利于维护. ...
- php随机密码函数的实例代码
php随机密码函数的入门例子 时间:2015-12-16 20:42:48来源:网络 导读:php生成随机密码的函数实例,php生成随机密码的函数,生成数字.大小写字母与特殊字符组合的随机密码. ...
- 【原创】试用十天被Pass所带来的启示
试用十天被Pass所带来的启示 招聘是门学问,很多人在研究,也有很多方案,不过面对人员难聘问题,很多方法又不灵了.于是我们采用了降低标准方案,扩招进来一些人员,于是问题又来了,想不想听我亲身经历的 ...