HDU_2256 矩阵快速幂 需推算
最近开始由线段树转移新的内容,线段树学到扫描线这里有点迷迷糊糊的,有时候放一放可能会好一些。
最近突然对各种数学问题很感兴趣。好好钻研了一下矩阵快速幂。发现矩阵真是个计算神器,累乘类的运算原本要O(N)的复杂度一下子给降到Log(N),非常大的进步了。
这个题目算是矩阵快速幂的比较难推的一个题目。题目要求 (sqrt(2)+sqrt(3))的 2^n并%1024,要求出值来并不难,构造矩阵即可,但是要mod1024就有问题了,小数不能直接mod,但是如果你取整之后再mod,结果绝逼出问题,因为浮点数的精度问题。
所以从斌牛的博客上看到如此推算,推算第一块不难,而且很容易求出Xn 和 Yn,但是问题又出来了,要是求出来后,直接用(int)(Xn+Yn*sqrt(6))%1024,又会出问题,还是浮点数取整问题,我一开始就这么算的,导致结果奇葩。看来在mod的时候有浮点数要格外注意,直接处理的话,不管怎么取整,都会出问题。
所以分割线下面的推算就避开了这个问题,这个确实好难想到,通过变换一下,得到最终的结果必定是2Xn-(0.101...)^n,因为最终mod是用不大于浮点数的最大整数在mod,所以最终结果就是2Xn-1.第二条确实好难想到!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
struct Mat{
int mat[][];
};
Mat E,a;
Mat operator *(Mat a,Mat b)
{
Mat c;
memset(c.mat,,sizeof (Mat));
for(int i=;i<;i++)
for (int j=;j<;j++)
for (int k=;k<;k++)
{
if (a.mat[i][k]> && b.mat[k][j]>)
c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
c.mat[i][j]%=;
}
return c;
}
Mat operator ^(Mat ac,int x)
{
Mat c;
c=E;
for (;x;x>>=)
{
//cout<<c.mat[0][0]<<" is "<<endl;
if (x&)
c=c*ac;
ac=ac*ac;
}
return c; }
void init()
{
memset(E.mat,,sizeof (Mat));
// memset(a.mat,0,sizeof (Mat));
a.mat[][]=;
a.mat[][]=;
a.mat[][]=;
a.mat[][]=;
for (int i=;i<;i++)
E.mat[i][i]=;
}
int main()
{
init();
int t;
scanf("%d",&t);
while (t--)
{
int n;
scanf("%d",&n);
Mat s=a^(n-);
int q1=s.mat[][]*+s.mat[][]*;
int ans=(q1*-)%;
printf("%d\n",ans);
}
return ;
}
HDU_2256 矩阵快速幂 需推算的更多相关文章
- 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 数论矩阵快速幂
题目要求求出(√2+√3)2n的整数部分再mod 1024. (√2+√3)2n=(5+2√6)n 如果直接计算,用double存值,当n很大的时候,精度损失会变大,无法得到想要的结果. 我们发现(5 ...
- HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- hdu 2243 考研路茫茫——单词情结 ac自动机+矩阵快速幂
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243 题意:给定N(1<= N < 6)个长度不超过5的词根,问长度不超过L(L <23 ...
- hdu5564--Clarke and digits(数位dp+矩阵快速幂)
Clarke and digits 问题描述 克拉克是一名人格分裂患者.某一天,克拉克变成了一个研究人员,在研究数字. 他想知道在所有长度在[l,r]之间的能被7整除且相邻数位之和不为k的正整数有多少 ...
- hdu3306 Another kind of Fibonacci【矩阵快速幂】
转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://acm.hdu.edu.cn/showproblem. ...
- BZOJ 2510: 弱题( 矩阵快速幂 )
每进行一次, 编号为x的数对x, 和(x+1)%N都有贡献 用矩阵快速幂, O(N3logK). 注意到是循环矩阵, 可以把矩阵乘法的复杂度降到O(N2). 所以总复杂度就是O(N2logK) --- ...
- HDU 5171 GTY's birthday gift 矩阵快速幂
GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
随机推荐
- 二进制枚举之被RE完虐的我的一天
记录一道学长们说有点难度的题目 好好玩啊这道题 ACM程序设计大赛是大学级别最高的脑力竞赛,素来被冠以"程序设计的奥林匹克"的尊称.大赛至今已有近40年的历史,是世界范围内历史最悠 ...
- 026、MySQL取字符串左边,取字符串右边,取字符串中间,取文本开始位置
#取文本左边 ); #田 ); #田攀 ); #田攀5 #取文本右边 ); # ); # ); #攀52 #取文本中间 '); #田攀 '); #攀5 #从字符串s中获取s1的开始位置 不忘初心,如果 ...
- excel 两列值匹配取另外一列值 INDEX MATCH 函数
=INDEX($D:$D,MATCH(K68,$C:$C,0))
- VUE- 访问服务器端数据 axios
VUE- 访问服务器端数据 axios 一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request ...
- nginx配置多个项目
使用Nginx要在同一个域名下配置多个项目有两种方式: nginx按不同的目录分发给不同的项目 启用二级域名,不同的项目分配不同的二级域名 1.nginx按不同的目录分发给不同的项目: server ...
- 关于torchvision.models中VGG的笔记
VGG 主要有两种结构,分别是 VGG16 和 VGG19,两者并没有本质上的区别,只是网络深度不一样. 对于给定的感受野,采用堆积的小卷积核是优于采用大的卷积核的,因为多层非线性层可以增加网络深度来 ...
- maven启动报错No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building th ...
- Echarts词云图
今天使用Echarts写了个词云图,之前使用pycharts生成的html就是echarts.主要代码如下,另外Echarts需要到https://www.echartsjs.com/下载,开发时使用 ...
- 1-Java类结构和main函数
目录 Java类 main函数 1.Java类 - 类是java中最基础的逻辑单位 java中所有的内容都要放在类的范围中 - 类的构成 成员变量/属性 成员方法/函数 - java文件必须以.jav ...
- 045-利用反射机制,简单的实现PHP插件模式
<?php //利用反射机制,简单的实现PHP插件模式 # 假设,我们有一款开源产品,所有开发者都必须在我定制的需求之上,进行二次开发, # 而开发完成后的新模块,就是一个不一样的新插件,可以放 ...