解题报告:poj 3070 - 矩阵快速幂简单应用
2017-09-13 19:22:01
writer:pprp
题意很简单,就是通过矩阵快速幂进行运算,得到斐波那契数列靠后的位数
.
这是原理,实现部分就是矩阵的快速幂,也就是二分来做
矩阵快速幂可以用来解决线性递推方程,难点在于矩阵的构造
代码如下:
/*
@theme:用矩阵快速幂解决线性递推公式-斐波那契数列
@writer:pprp
@begin:21:17
@end:19:10
@error:注意mod的位置,不能连用,要加括号来用
@date:2017/9/13
*/ #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
typedef long long ll;
const int mod=; struct Mat
{
ll a[][];
}; Mat mat_mul(Mat x, Mat y)
{
Mat res;
memset(res.a,,sizeof(res.a));
for(int i = ; i < ; i++)
for(int j = ; j < ; j++)
for(int k = ; k < ; k++)
{
res.a[i][j] += x.a[i][k] * y.a[k][j];
res.a[i][j] %= mod;
}
return res;
} void quick_pow(ll n)
{
Mat E,res;
E.a[][] = E.a[][] = E.a[][] = ;
E.a[][] = ;
memset(res.a,,sizeof(res.a)); for(int i = ; i < ; i++)//二阶单位矩阵
res.a[i][i] = ; while(n)
{
if(n&)
res = mat_mul(res,E);
E = mat_mul(E,E);
n >>= ;
}
cout << res.a[][] << endl;
} int main()
{
ios::sync_with_stdio(false);
ll n;
while(cin >> n && n != -)
{
quick_pow(n);
}
return ;
}
/*
@theme:用矩阵快速幂解决线性递推公式-斐波那契数列
@writer:pprp
@begin:21:17
@end:19:10
@error:注意mod的位置,不能连用,要加括号来用
@date:2017/9/13
*/ #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std;
typedef long long ll;
const int mod=; struct Mat
{
ll a[][];
}; Mat mat_mul(Mat x, Mat y)
{
Mat res;
memset(res.a,,sizeof(res.a));
for(int i = ; i < ; i++)
for(int j = ; j < ; j++)
for(int k = ; k < ; k++)
{
res.a[i][j] += x.a[i][k] * y.a[k][j];
res.a[i][j] %= mod;
}
return res;
} void quick_pow(ll n)
{
Mat E,res;
E.a[][] = E.a[][] = E.a[][] = ;
E.a[][] = ;
memset(res.a,,sizeof(res.a)); for(int i = ; i < ; i++)//二阶单位矩阵
res.a[i][i] = ; while(n)
{
if(n&)
res = mat_mul(res,E);
E = mat_mul(E,E);
n >>= ;
}
cout << res.a[][] << endl;
} int main()
{
ios::sync_with_stdio(false);
ll n;
while(cin >> n && n != -)
{
quick_pow(n);
}
return ;
}
解题报告:poj 3070 - 矩阵快速幂简单应用的更多相关文章
- POJ 3070 矩阵快速幂解决fib问题
矩阵快速幂:http://www.cnblogs.com/atmacmer/p/5184736.html 题目链接 #include<iostream> #include<cstdi ...
- POJ 3070 矩阵快速幂
题意:求菲波那切数列的第n项. 分析:矩阵快速幂. 右边的矩阵为a0 ,a1,,, 然后求乘一次,就进一位,求第n项,就是矩阵的n次方后,再乘以b矩阵后的第一行的第一列. #include <c ...
- poj 3070 矩阵快速幂模板
题意:求fibonacci数列第n项 #include "iostream" #include "vector" #include "cstring& ...
- poj 3233 矩阵快速幂
地址 http://poj.org/problem?id=3233 大意是n维数组 最多k次方 结果模m的相加和是多少 Given a n × n matrix A and a positive i ...
- POJ3070矩阵快速幂简单题
题意: 求斐波那契后四位,n <= 1,000,000,000. 思路: 简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...
- poj 3734 矩阵快速幂+YY
题目原意:N个方块排成一列,每个方块可涂成红.蓝.绿.黄.问红方块和绿方块都是偶数的方案的个数. sol:找规律列递推式+矩阵快速幂 设已经染完了i个方块将要染第i+1个方块. a[i]=1-i方块中 ...
- POJ 3233 矩阵快速幂&二分
题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的. 所以呢 要把那个n换成log 那这个怎么搞呢 二分! 当k为偶数时: 当k为奇数时: 就按照这么搞 ...
- poj 3744 矩阵快速幂+概率dp
题目大意: 输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10).再输入p,代表这位童子兵非常好玩,走路一蹦一跳的.每次他在 i 位置有 p 的概率走一步到 i ...
- Blocks(POJ 3734 矩阵快速幂)
Blocks Input The first line of the input contains an integer T(1≤T≤100), the number of test cases. E ...
随机推荐
- 【转】Spring Boot 日志配置(超详细)
更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. [toc] 简书不支持目录,截图一张. image.png 默认日志 Logback: 默认情况 ...
- zipline整体架构
在这里可以看出,zipline由下面几个主要的部分构成 名称 说明 TradingAlgorithm 量化策略的抽象,既可以通过初始化传入构造上参数的方式,也可以通过继承的方式构造,其中zipline ...
- Python并行编程(六):线程同步之条件
1.基本概念 条件指的是应用程序状态的改变.其中某些线程在等待某一条件发生,其 他线程会在该条件发生的时候进行通知,一旦条件发生,线程会拿到共享资源的唯一权限. 2.示例代码 from threadi ...
- (0.2.2)如何下载mysql数据库(二进制、RPM、源码、YUM源)
目录 1.基于Linux平台的Mysql项目场景介绍 2.mysql数据库运行环境准备-最优配置 3.如何下载mysql数据库 3.1. 二进制文件包 3.2.RPM文件 3.3.源码包 3.4.yu ...
- AngularJS filter:search 是如何匹配的 ng-repeat filter:search ,filter:{$:search},只取repeat的item的value 不含label
1. filter可以接收参数,参数用 : 进行分割,如下: {{ expression | filter:argument1:argument2:... }} 2. filter参数是 对象 ...
- 实时流计算Spark Streaming原理介绍
1.Spark Streaming简介 1.1 概述 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理.支持从多种数据源获取数据,包 ...
- PAT 1091 Acute Stroke [难][bfs]
1091 Acute Stroke (30 分) One important factor to identify acute stroke (急性脑卒中) is the volume of the ...
- django xadmin app models 注册
在app下新建adminx.py文件 # -*- coding: utf-8 -*- # 作者:神秘藏宝室 # 日期:2018/12/28 22:07 import xadmin from .mode ...
- Linux系统——系统安全及应用
系统账号清理 将非登录用户的shell设为/sbin/nologin 方法一:usermod -s 方法二: chsh命令,交互式修改,用来修改用户的登录情况 方法三: chsh -s 方法四:vim ...
- 安装memcached扩展
1.wget http://pecl.php.net/package/memcache 下载相对应的扩展包 2. tar -zxvf memcache-2.2.7.tgz 3. cd memcac ...