2008 Round 1A C Numbers (矩阵快速幂)
题目描述:
请输出(3+√5)^n整数部分最后3位。如果结果不超过2位,请补足前导0.
分析:
我们最容易想到的方法肯定是直接计算这个表达式的值,但是这样的精度是不够的。朴素的算法没有办法得到答案。但是我们根据分析可以发现这个问题不用求出√5的值也可以得到答案。
我们可以发现,将(3+√5)n这个式子展开后就是An+Bn√5的形式。同样的,我们将(3-√5)n这个式子展开后就是An-Bn√5。
因此,(3+√5)n+(3-√5)n=2An是一个整数,其中0<(3-√5)^n <1,是解题的关键。由于(3+√5)n=2An-(3-√5)n,所以(3+√5)^n的整数部分就是2An-1.
根据上面的推导,只要高效的求出An就可以解决这个问题了。由于(3+√5)(n+1)=(3+√5)(3+√5)n=(3+√5) (An+Bn√5),我们可以得到An,Bn,A(n+1),B(n+1)的递推关系。
A(n+1)=3An+5Bn;
B(n+1)=An+3Bn;
A0=1 B0=0;
我们可以用矩阵表示这个递推关系,因此可以使用快速幂运算。因为结果要求的是后三位,所以最后取余1000就行。
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct Node
{
int e[2][2];
Node()
{
memset(e,0,sizeof(e));
}
};
Node mul(Node a,Node b)
{
Node c;
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
for(int k=0; k<2; k++)
{
c.e[i][j]+=(a.e[i][k]*b.e[k][j]);
}
return c;
}
Node quick_mi(Node a,int b)
{
Node c;
c.e[0][0]=1;
c.e[1][1]=1;
while(b)
{
if(b&1)
c=mul(c,a);
b>>=1;
a=mul(a,a);
}
return c;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
Node A;
A.e[0][0]=3;
A.e[0][1]=5;
A.e[1][0]=1;
A.e[1][1]=3;
A=quick_mi(A,n);
printf("%03d\n",(2*A.e[0][0]-1)%1000);
}
return 0;
}
2008 Round 1A C Numbers (矩阵快速幂)的更多相关文章
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
- Count Numbers(矩阵快速幂)
Count Numbers 时间限制: 8 Sec 内存限制: 128 MB提交: 43 解决: 19[提交] [状态] [讨论版] [命题人:admin] 题目描述 Now Alice want ...
- Project Euler 435 Polynomials of Fibonacci numbers (矩阵快速幂)
题目链接: https://projecteuler.net/problem=435 题意: The Fibonacci numbers $ {f_n, n ≥ 0}$ are defined rec ...
- Educational Codeforces Round 60 D dp + 矩阵快速幂
https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...
- Educational Codeforces Round 14E. Xor-sequences(矩阵快速幂)
传送门 题意 给定序列,从序列中选择k(1≤k≤1e18)个数(可以重复选择),使得得到的排列满足\(x_i与x_{i+1}\)异或的二进制表示中1的个数是3的倍数.问长度为k的满足条件的序列有多少种 ...
- 2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
/** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. ...
- Google Code Jam 2008 Round 1A C Numbers(矩阵快速幂+化简方程,好题)
Problem C. Numbers This contest is open for practice. You can try every problem as many times as you ...
- Sam's Numbers 矩阵快速幂优化dp
https://www.hackerrank.com/contests/hourrank-21/challenges/sams-numbers 设dp[s][i]表示产生的总和是s的时候,结尾符是i的 ...
- hdu 5667 BestCoder Round #80 矩阵快速幂
Sequence Accepts: 59 Submissions: 650 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
随机推荐
- 201621123037 《Java程序设计》第7周学习总结
作业06-接口.内部类 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 思维导图: 其他-笔记: 2. 书面作业 1. ArrayList代码分析 1.1 解释Arr ...
- php过滤字符串
addslashes(); stripslashes(); //对数据库教程操作时,转义特殊字符 定义:addslashes() 函数在指定的预定义字符前添加反斜杠. 语法:addslashes(st ...
- Android手机Fiddler真机抓包
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许用户监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统 ...
- 第73天:jQuery基本动画总结
一.DOM对象跟jQuery对象相互转换 jQuery对象转换成DOM对象: 方式一:$(“#btn”)[0] 方式二:$(“#btn”).get(0) DOM对象转换成jQuery对象: $(doc ...
- BZOJ3613 HEOI2014南园满地堆轻絮
不明白在某谷上是怎么标到紫的.二分答案或者发现答案就是最大逆序差的一半. #include<iostream> #include<cstdio> #include<cma ...
- 【转】ssh免密码登录的原理
工作第一天,就需要登录各种服务器,免密码登录无疑能大大的提高工作效率.以前只知道配置,今天了解了下原理. 免密码登录原理 图解,server A免登录到server B: 1.在A上生成公钥私钥. 2 ...
- 【刷题】BZOJ 1951 [Sdoi2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- 洛谷 P1854 花店橱窗布置 【dp】
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- 洛谷 P2505 [HAOI2012]道路 解题报告
P2505 [HAOI2012]道路 题目描述 C国有n座城市,城市之间通过m条单向道路连接.一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小.两条最短路不同,当且仅当它 ...
- max os x lighttpd + php + mysql 部署
手贱,升级了max os x 到Yosemite,系统默认装了nginx,php,开机会自动启动!1 开机启动脚本默认在下面位置: /Library/LaunchDaemons/com.root.ng ...