这道题其实也是水题来的,求Fibonacci数的前4位和后4位,在n==40这里分界开。后4位不难求,因为n达到了10^18的规模,所以只能用矩阵快速幂来求了,但在输出后4位的时候一定要注意前导0的处理(我就是在这里wa了一发,也是看了看别人的代码才发现的)。

  前4位的话稍微有点难处理,我一开始就在想该怎么处理 log10(f(n)) 呢?把f[n]= f[n-1]+f[n-2]? 不行,log对+运算没法展开,我找了好久也没能找到什么能让f[n]展开成相乘或者幂的形式,上网搜了下题解,才发现别人竟然是用通项公式来处理的(我当时也想过,但因为含有"-"运算所以就直接忽略了,可是没想到其实可以稍微变通下就可以把"-"号去掉的):  f(n)= 1/sqrt(5) (( (1+sqrt(5))/2)^n - ((1-sqrt(5))/2)^n );

  具体实现的时候Log10 F[n]约等于 ((1+sqrt(5))/2)^n/sqrt(5),这里我们把 ((1-sqrt(5))/2)^n这一项忽略了,因为当N>=40时,这个数已经小的可以忽略。于是log10 F[n]就可以化简成 n*log10( (1+sqrt(5))/2 ) -log10 sqrt(5),不多说,附上代码:

 #include<cstdio>
#include<cmath>
#include<cstring>
#define For(i,s,t) for(int i=s; i<=t; ++i)
typedef long long LL;
const LL mod= ; struct matrix{
LL a,b,c,d;
matrix(LL a=, LL b=, LL c=, LL d=):a(a),b(b),c(c),d(d) {}
matrix operator *(const matrix &m2) const {
return matrix((a*m2.a%mod+b*m2.c%mod)%mod, (a*m2.b%mod+b*m2.d%mod)%mod, (c*m2.a%mod+d*m2.c%mod)%mod, (c*m2.b%mod+d*m2.d%mod)%mod);
}
} A(,,,),E(,,,); matrix quick_mod(matrix m, LL b){
matrix res(E);
while(b){
if(b&) res= res*m;
m= m*m;
b>>=;
}
return res;
} void solve(LL n){
LL last= quick_mod(A,n-).a;
// int last= int(quick_mod(A,n-1).a);
double m= n*log10((+sqrt(5.0))/)-log10(sqrt(5.0));
m -= LL(m);
LL first= LL(pow(10.0,m)*);
//一定要有04d!后4位的前导0也要输出!
printf("%I64d...%04I64d\n",first,last);
} LL f[]= {,,};
void init(int n=){
For(i,,n) f[i]= f[i-]+f[i-];
} int main(){
init();
LL n;
while(~scanf("%I64d",&n)){
if(n<) printf("%I64d\n",f[n]);
else solve(n);
}
return ;
}

  很神奇的是,用 I64d来输出前4位竟然是0ms(直接%04d的话却是15ms),好像第一次排上了hdu榜上的第一页,哈哈~~附上一张图:

hdu 3117 Fibonacci Numbers的更多相关文章

  1. HDU 3117 Fibonacci Numbers(围绕四个租赁斐波那契,通过计++乘坐高速动力矩阵)

    HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵高速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意:  求第n个斐波那契数的 ...

  2. hdu 3117 Fibonacci Numbers 矩阵快速幂+公式

    斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...

  3. HDU 3117 Fibonacci Numbers(矩阵)

    Fibonacci Numbers [题目链接]Fibonacci Numbers [题目类型]矩阵 &题解: 后4位是矩阵快速幂求,前4位是用log加Fibonacci通项公式求,详见上一篇 ...

  4. HDU 3117 Fibonacci Numbers 数学

    http://acm.hdu.edu.cn/showproblem.php?pid=3117 fib是有一个数学公式的. 这里的是标准的fib公式 那么fib = 1 / sqrt(5) * ((1 ...

  5. HDU 3117 Fibonacci Numbers( 矩阵快速幂 + 数学推导 )

    链接:传送门 题意:给一个 n ,输出 Fibonacci 数列第 n 项,如果第 n 项的位数 >= 8 位则按照 前4位 + ... + 后4位的格式输出 思路: n < 40时位数不 ...

  6. [HDU3117]Fibonacci Numbers

    题目:Fibonacci Numbers 链接:http://acm.hdu.edu.cn/showproblem.php?pid=3117 分析: 1)后四位可以用矩阵快速幂解决.$T= \left ...

  7. hdu Interesting Fibonacci

    Interesting Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  8. hdu 4786 Fibonacci Tree (2013ACMICPC 成都站 F)

    http://acm.hdu.edu.cn/showproblem.php?pid=4786 Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) ...

  9. hdu 1021 Fibonacci Again(找规律)

    http://acm.hdu.edu.cn/showproblem.php?pid=1021 Fibonacci Again Time Limit: 2000/1000 MS (Java/Others ...

随机推荐

  1. C#之参数线程

    public Form1() { InitializeComponent(); } Thread t; private void button1_Click(object sender, EventA ...

  2. c#xml追加读取节点

    读取 if (File.Exists("Book.xml")) { XmlDocument doc = new XmlDocument(); doc.Load("Book ...

  3. Financial Management 分类: POJ 2015-06-11 10:51 12人阅读 评论(0) 收藏

    Financial Management Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 164431   Accepted: ...

  4. 【计算机网络】当输入URL后发生了什么

    我们使用一个非常简单的模型,并假设它是最简单的HTTP请求,不使用代理并且使用的是IPv4 1. 浏览器首先判断使用的是什么协议(ftp/http),然后对URL进行安全检查.最后浏览器查看缓存,如果 ...

  5. python中string.casefold和string.lower区别

    string.casefold和string.lower 区别 python 3.3 引入了string.casefold 方法,其效果和 string.lower 非常类似,都可以把字符串变成小写, ...

  6. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...

  7. iis6兼容32位运行

    做web服务迁移,从32位win2003迁移到64位win2003,数据库是32位Oracle在另外一台服务器上. 迁移之后数据库各种连不上,oracle的客户端32位的装完装64位的,odp.net ...

  8. 3-WebPack

    一. 什么是WebPack WebPack可以看做是模块加载.打包工具. 它所做的事情是 1.分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Typ ...

  9. heredoc 和 nowdoc

    heredoc 和 nowdoc     多次使用 php nowdoc HereDoc 插入大量Hmtl都没有成功,一样提示语法有问题,事实上PHP手册注明是这样写的,实在很奇怪 最后发现了问题所在 ...

  10. 用PyAIML开发简单的对话机器人

    AIML files are a subset of Extensible Mark-up Language (XML) that can store different text patterns ...